ListView中是否有用于null值的特殊模板或语法

本文关键字:语法 是否 用于 null ListView | 更新日期: 2023-09-27 18:22:41

我有一个ListView:

myListView.ItemsSource = GetSomeData();

如果在GetSomeData()中的某个项目中,其中一个字段恰好为null,那么我如何在GUI上将其显示为类似"[Value isn't known]"的内容,而不必在"cs"文件中检查是否为null?有空值的特殊模板吗?

ListView中是否有用于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,并在绑定值上使用触发器来确定应该使用哪个实际模板。