WPF привязка ComboBox к значениям из двух объектов - PullRequest
0 голосов
/ 22 ноября 2018

Добрый день,

У меня проблема с привязкой двух объектов к моему списку.

Технически я пытаюсь добиться этого:

CrudGrid.SelectionChanged += (o, e) =>
{
    CustomersComboBox.SelectedItem = SelectedModel?.Customer;
};

Но в том числевсе интересные функции привязки TwoWay, а это означает, что изменение SelectedItem в ComboBox также изменяет его в 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 голосов
/ 23 ноября 2018

Вы пробовали RaisePropertyChanged?

RaisePropertyChanged (SelectedModel.Customer);уведомить пользовательский интерфейс о том, что в модели что-то изменилось.Возможно, реализовать его при изменении выбора.Таким образом, он запустит свойство, привязанное к вашему виду.

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

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...