我正在做一个项目,如果Gridview
中加载的数据中有某个属性可用,我必须显示Gridview
的Footer
。
我使用自定义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
中显式创建DataTemplate
Footer
,它可以按预期工作,但是如果我在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>