4

我正在尝试清除 a 中的选择,ComboBox但出现错误

“无法转换值''。”

' ComboBoxsItemSource绑定到一个键值对列表。是SelectedValue键并且DisplayMemberPath绑定到值。

如果ItemSource绑定到普通数据类型,如字符串,并清除 中的选定值ComboBox,则不会发生此错误。但我需要它作为一个键值对,因为它是一个查找。

怀疑该错误可能是因为键值对没有对应的空条目或无法取空值。这可能是框架中的错误。如何解决这个问题。看到说使用 Nullable 值并进行转换的博客,但似乎不是解决此问题的好方法,因为必须编写显式转换适配器。有没有更好的方法来解决这个问题。

尝试将ItemSource绑定设置为可为空的值。但得到一个不同的错误

“System.Nullable>”不包含“Key”的定义,并且找不到接受“System.Nullable>”类型的第一个参数的扩展方法“Key”(您是否缺少 using 指令或程序集引用?)

//XAML

<Combobox 
    Name="CityPostalCodeCombo"
    ItemsSource="{Binding CityList, TargetNullValue=''}"
    SelectedItem="{Binding PostalCode, UpdateSourceTrigger=PropertyChanged, TargetNullValue='', ValidatesOnDataErrors=True, NotifyOnValidationError=True, Mode=TwoWay}"
    SelectedValuePath="Key"
    DisplayMemberPath="Value"
    AllowNull="True"
    MinWidth="150"
    MaxHeight="50">

//Code:  View Model binding
private List<KeyValuePair<string, string>> cityList = GetCityList(); 

// City and postal code list
public List<KeyValuePair<string, string>> CityList
{
  get { return cityList; }
  set
  {
    if (value != cityList)
    {
      cityList = value;
      OnPropertyChanged("CityList");
    }
  }
}             

public KeyValuePair<string, string>? PostalCode
{
    get 
    { 
      return CityList.Where(s =>   s.Key.Equals(postalCode.Value)).First(); 
    }      
    set
    {
      if (value.Key != postalCode.Value)
      {
          postalCode.Value = value.Key;
          OnPropertyChanged("PostalCode");
      }
    }
}

// Populate Cities:
private static List<KeyValuePair<string, string>>GetCityList()
{   
    List<KeyValuePair<string, string>> cities = new List<KeyValuePair<string, string>>();   
    KeyValuePair<string, string> value = new KeyValuePair("94310", "Palo Alto");    
    cities.Add(value);  

    value = new KeyValuePair("94555", "Fremont");   
    cities.Add(value);  

    value = new KeyValuePair("95110", "San Jose");  
    cities.Add(value);  

    return cities;
}
4

0 回答 0