由于某种原因,当我将ComboBox绑定到POCO列表时,绑定到SelectedValue的属性被设置两次:
我有以下ComboBox绑定到我的ViewModel中的属性:
<ComboBox ItemsSource="{Binding Path=AllowedClassifications}"
DisplayMemberPath="Value"
SelectedValue="{Binding Path=TargetGroup.Classification}"
SelectedValuePath="Key" />
ViewModel中的属性定义为:
//ICollection is implemented by ObservableCollection<T>
//DataBaseFieldValue has two public properties: string Key, string Value
public ICollection<DatabaseFieldValue> AllowedClassifications
{
get { return _allowedClassifications; }
private set { _allowedClassifications = value; }
}
public Model.TargetGroup TargetGroup
{
get { return _targetGroup; }
private set { _targetGroup = value; OnPropertyChanged("TargetGroup"); }
}
TargetGroup.Classification定义为:
public string Classification
{
get { return _classification; }
set
{
System.Diagnostics.Debug.WriteLine("Classification: " + value);
_classification = value;
OnPropertyChanged("Classification");
}
}
调试输出:
分类: MyNamespace.DatabaseFieldValue
分类:2
这里发生了什么?我这样做完全错了吗?
答案 0 :(得分:2)
除了根据您的XAML绑定到SelectedValue的属性应设置为POCO.Key值而不是POCO.Value(正如您所预期的那样)之外,您的代码中的所有内容都可以正常显示。我刚刚创建了一个类似设置的测试项目,一切正常。
或者,您可以尝试将combobox的SelectedItem属性与ItemTemplate结合使用:
<ComboBox ItemsSource="{Binding Path=AllowedClassifications}"
SelectedItem="{Binding Path=TargetGroup.Classification}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Value}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
在这种情况下,TargetGroup.Classification
属性必须是DatabaseFieldValue
类型。