我正在尝试清除 a 中的选择,ComboBox
但出现错误
“无法转换值''。”
' ComboBox
sItemSource
绑定到一个键值对列表。是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;
}