WPF:ListView:显示默认值而不是空字符串

时间:2017-11-13 17:13:47

标签: c# wpf xaml data-binding

我有一个Listview,它的ItemSource绑定到一个ObservableCollection,并且SelectedItem绑定到一个字符串。可观察集合可能包含空字符串;在这种情况下,我希望listview显示一些特殊的字符串,而不只是一个没有文本的空项。

这就是我想象的应该如何运作:

<ListView ItemSource="{Binding AvailableTags}" SelectedItem="{Binding SelectedTag}">
<ListView.ItemContainerStyle>
     <Style TargetType="ListViewItem">
          <Setter Property="Content" Value="Untagged" />
              <Style.Triggers>
                   <DataTrigger Binding="-> Which binding to use?" Value="">
                       <Setter Property="Content" Value="-> How to get the Default value?" />
                   </DataTrigger>
              </Style.Triggers>
     </Style>
</ListView.ItemContainerStyle>
</ListView>

正如您所看到的,在这个虚拟源代码中,有两个占位符。我怎样才能让它发挥作用?还是我走错了路?

1 个答案:

答案 0 :(得分:0)

您可以修改ListView ItemTemplate,并使用IValueConverter:

<ListView 
        ItemsSource="{Binding AvailableTags}" 
        SelectedItem="{Binding SelectedTag}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Converter={StaticResource TagConverter}}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

转换器:

public class TagConverter : IValueConverter
{
    #region IValueConverter Members

    object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string tag = (string)value;

        return string.IsNullOrEmpty(tag) ? "Your custom string display" : tag;
    }

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

请记住将转换器添加为范围内的资源。