根据Data中的属性控制GridView Footer的可见性

时间:2018-01-07 19:24:27

标签: c# gridview uwp

我正在开展一个项目,如果某个属性在Footer中已加载的数据中可用,则必须显示Gridview的{​​{1}}。
我使用自定义Gridview类在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 } 中明确创建Footer作为DataTemplate但是如果我在Gridview中创建DataTemplate并尝试使用它,它不起作用。它始终显示Dictionary属性是否为空。我使用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,它应该基于转换器可见或折叠。如果属性中存在非空字符串,则它将可见,否则将折叠。

String中的Visiblity转换器:

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(); } } 的项目中确定其DataContext。任何建议都会有所帮助。感谢

1 个答案:

答案 0 :(得分:1)

页脚必须知道从何处获取价值。如果列表包含多个项目,则无法知道应该使用哪个项目。要在页脚模板中进行绑定,您必须直接将Footer属性设置为它应该使用的实例:

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