我有一个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>
正如您所看到的,在这个虚拟源代码中,有两个占位符。我怎样才能让它发挥作用?还是我走错了路?
答案 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
}
请记住将转换器添加为范围内的资源。