我有一个组合框,我将在开头添加一个<x:Null/>
,因为'null'是绑定属性的完全有效值,但是WPF似乎不愿意设置它。这是XAML:
<ComboBox SelectedItem="{Binding PropertyName}">
<ComboBox.ItemsSource>
<CompositeCollection>
<x:Null/>
<CollectionContainer Collection="{Binding (available items)}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name, FallbackValue='(None)'}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
(available items)
中的集合具有带有Name
属性的对象。当(None)
的当前值为null时,组合框会正确显示PropertyName
,并且当我选择一个时,它会设置为集合中的一项,但是当我选择(None)
时,它不会将属性设置为null。我有什么办法可以做到这一点?
答案 0 :(得分:0)
我最近遇到了这个问题...一种解决方法是拥有一个可以显示空值属性的视图模型:
public class ListItemValue<T>
{
public ListItemValue(string name, T value)
{
Name = name;
Value = value;
}
public string Name { get; }
public T Value { get; }
}
答案 1 :(得分:0)
用实际的实例替换<x:Null>
并使用转换器:
public class Converter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => value;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
value is short ? null : value;
}
XAML:
<ComboBox>
<ComboBox.SelectedItem>
<Binding Path="PropertyName">
<Binding.Converter>
<local:Converter />
</Binding.Converter>
</Binding>
</ComboBox.SelectedItem>
<ComboBox.ItemsSource>
<CompositeCollection xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:Int16 />
<CollectionContainer Collection="{Binding Source={StaticResource items}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name, FallbackValue='(None)'}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>