WPF将ComboBox绑定到两个对象的值

时间:2018-11-22 20:56:12

标签: c# wpf

下午好,

我在将两个对象绑定到组合框时遇到问题。

从技术上讲,我正在尝试实现这一目标:

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的目的。

1 个答案:

答案 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));

};