我正在开展一个项目,如果某个属性在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
。任何建议都会有所帮助。感谢
答案 0 :(得分:1)
页脚必须知道从何处获取价值。如果列表包含多个项目,则无法知道应该使用哪个项目。要在页脚模板中进行绑定,您必须直接将Footer
属性设置为它应该使用的实例:
<GridView Footer="{x:Bind TheOneItemTemplateData}"> ... </GridView>