[英]How do you get a Combobox to set a value of null when bound to 'SelectedItem'?
我有一個組合框,要在開頭添加一個<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
屬性的對象。 當PropertyName
的當前值為null時,組合框正確顯示(None)
,並且當我選擇一個時將其設置為集合中的一項,但是當我選擇(None)
,它不會將該屬性設置為null。 我有什么辦法可以做到這一點?
我最近遇到了這個問題。一種解決方法是擁有一個可以顯示null值屬性的視圖模型:
public class ListItemValue<T>
{
public ListItemValue(string name, T value)
{
Name = name;
Value = value;
}
public string Name { get; }
public T Value { get; }
}
將<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.