ListView中是否有用于null值的特殊模板或语法
本文关键字:语法 是否 用于 null ListView | 更新日期: 2023-09-27 18:22:41
我有一个ListView:
myListView.ItemsSource = GetSomeData();
如果在GetSomeData()
中的某个项目中,其中一个字段恰好为null,那么我如何在GUI上将其显示为类似"[Value isn't known]"
的内容,而不必在"cs"文件中检查是否为null?有空值的特殊模板吗?
您可以创建两个DataTemplates:一个用于现有项,另一个用于null
s。然后,您可以使用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,并在绑定值上使用触发器来确定应该使用哪个实际模板。