基于数据中的属性控制 GridView 页脚的可见性



我正在做一个项目,如果Gridview中加载的数据中有某个属性可用,我必须显示GridviewFooter
我使用自定义DataTemplateSelector类在Gridview中呈现数据,但该属性存在于主类中。

public class ItemTemplateData
{
public string PropertyToShowFooter {get; set;}
}
// other classes derive from this main class
public class VideoItemTemplateData : ItemTemplateData
{
// other properties not related here
}

现在,如果我在Gridview中显式创建DataTemplateFooter,它可以按预期工作,但是如果我在Dictionary中创建DataTemplate并尝试使用它,则它不起作用。它始终显示属性是否为空Footer。我使用Converter转换属性以控制Visibility

更新:

没有代码/方法!!工作无论如何,它始终显示页脚或隐藏页脚。

// First method that I tried
<Gridview>
....
<GridView.FooterTemplate>
<DataTemplate
x:DataType="data:ItemTemplateData">
<UserControl>
<HyperlinkButton
Visibility="{x:Bind PropertyToShowFooter, Mode=OneWay, Converter={StaticResource StringToVisibleConverter}}"
Click="HyperlinkButton_Click"
Style="{StaticResource GridViewFooterLinkStyle}"/>
</UserControl>
</DataTemplate>
</GridView.FooterTemplate>
</Gridview>
// 2nd method that I tried and really want this one to work.
<DataTemplate
x:Key="GridViewCustomFooterTemplate"
x:DataType="data:ItemTemplateData">
<UserControl>
<HyperlinkButton
Visibility="{x:Bind PropertyToShowFooter, Mode=OneWay, Converter={StaticResource StringToVisibleConverter}}"
Click="HyperlinkButton_Click"
Style="{StaticResource GridViewFooterLinkStyle}"/>
</UserControl>
</DataTemplate>
<GridView
FooterTemplate="{StaticResource GridViewCustomFooterTemplate}"/>

有关TemplateSelector的更多详细信息:

public class DataTemplateSelectorClass : DataTemplateSelector
{
public DataTemplate VideoItemTemplate { get; set; }

protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (item is VideoItemTemplateData)
{
return VideoItemTemplate;
}
return base.SelectTemplateCore(item, container);
}
}

Footer只是一个简单的HyperlinkButton,它应该根据转换器可见或折叠。如果属性中存在非空字符串,则该字符串将可见,否则将被折叠。

字符串可视化转换器:

public class StringToVisiblity : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value is string && value != null)
{
if (value.ToString().Trim().Length > 0)
{
return Visibility.Visible;
}
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}

我不确定页脚将如何根据Gridview的项目确定其DataContext。任何建议都会有所帮助。谢谢

页脚必须知道从哪里获取值。如果列表包含多个项目,则它无法知道应使用哪一个。若要使页脚模板中的绑定正常工作,必须直接将Footer属性设置为它应使用的实例:

<GridView Footer="{x:Bind TheOneItemTemplateData}"> ... </GridView>

最新更新