ListView中是否有空值的特殊模板或语法?

时间:2015-11-20 03:28:03

标签: c# wpf

我有一个ListView:

myListView.ItemsSource = GetSomeData();

如果GetSomeData()中的一个项目中的一个字段碰巧为空,我怎样才能在GUI上显示它"[Value isn't known]",而不必在“cs”中检查是否为null文件?是否有空值的特殊模板?

1 个答案:

答案 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,并在绑定值上使用触发器来确定应该使用哪个实际模板。