【发布时间】:2018-01-08 16:54:09
【问题描述】:
我正在做一个项目,如果在 Gridview 中加载的数据中有某个属性可用,我必须显示 Footer 的 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 中显式创建Footer 作为DataTemplate,它会按预期工作,但是如果我在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。任何建议都会有所帮助。谢谢
【问题讨论】:
-
你是如何在后面的代码中编写选择器的?您显示或隐藏页脚的逻辑是什么?你能提供给我们MCVE吗?一般来说,您需要在选择器中验证您的 PropertyToShowFooter 属性,以便您的 UI 可以根据您的属性呈现正确的模板。但是,根据您的帖子,您的要求并不清楚。
-
我用新的代码/细节完全更新了这个问题。请看一看。