我有一个ListView:
myListView.ItemsSource = GetSomeData();
如果GetSomeData()
中的一个项目中的一个字段碰巧为空,我怎样才能在GUI上显示它"[Value isn't known]"
,而不必在“cs”中检查是否为null文件?是否有空值的特殊模板?
答案 0 :(得分:2)
您可以创建两个DataTemplates:一个用于存在的项目,另一个用于null
。然后,您可以使用DataTemplateSelector来确定哪个模板应该用于哪个项目,例如下面(调整您使用的键的模板键):
public class MyTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = (FrameworkElement)container;
if (item == null)
return (DataTemplate)element.FindResource("NullTemplate");
else
return (DataTemplate)element.FindResource("ItemTemplate");
}
}
要在ListView上使用此功能,只需添加
即可myListView.ItemTemplateSelector = new MyTemplateSelector();
以上是我推荐的方法,但如果你真的坚持在XAML中这样做,你可以尝试以下方法:
<ListView.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}">
<ContentPresenter.Style>
<Style TargetType="ContentPresenter">
<Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="ContentTemplate" Value="{StaticResource NullTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>
</ContentPresenter>
</DataTemplate>
</ListView.ItemTemplate>
我在这里做的是在ItemTemplate中添加另一个ContentPresenter,并在绑定值上使用触发器来确定应该使用哪个实际模板。