下午好,
我在将两个对象绑定到组合框时遇到问题。
从技术上讲,我正在尝试实现这一目标:
CrudGrid.SelectionChanged += (o, e) =>
{
CustomersComboBox.SelectedItem = SelectedModel?.Customer;
};
但是包括TwoWay绑定的所有很酷的功能,这意味着在ComboBox中更改SelectedItem也会在SelectedModel上对其进行更改。
要实现这种目标,我尝试这样做:
<ComboBox x:Name="CustomersComboBox"
ItemsSource="{Binding Customers}"
DisplayMemberPath="FullName"
IsSynchronizedWithCurrentItem="True"
SelectedValue="{Binding Path=SelectedModel.Customer, Mode=TwoWay}",
SelectedValuePath="FullName"/>
在输出控制台中没有任何作用或显示任何错误。
还值得指出的是,Customers是“ Customer”类型的可观察集合,而SelectedModel是“ Contract”类型。 合同通过Contract.Customer将客户附加到他们。
我可以轻松地在代码后面提供此功能,但这有点躲避了MVVM的目的。
答案 0 :(得分:0)
您是否尝试过RaisePropertyChanged?
RaisePropertyChanged(SelectedModel.Customer);通知UI模型中的某些内容已更改。也许在选择更改时实施它。这样,它将激发绑定到您的视图的属性。
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
然后
CrudGrid.SelectionChanged += (o, e) =>
{
CustomersComboBox.SelectedItem = SelectedModel?.Customer;
RaisePropertyChanged(nameof(SelectedModel.Customer));
};