簡體   English   中英

當綁定到“ SelectedItem”時,如何使Combobox設置null值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM