WPF Combobox SelectionChanged запись привязки

В моем xaml слева есть ListBox of Customers. Когда клиент выбран, справа будет отображаться информация о клиенте (имя, адрес, телефон, тип и т. Д.) В текстовое поле связывания или комбинированный список.

Справа тип - это комбинированный список, в котором есть событие SelectionChanged, которое заполняет что-то при изменении значения. Проблема заключается в том, что всякий раз, когда я выбираю другого клиента в ListBox слева, событие Type SelectionChanged также запускается и заполняет значение. Как я могу обнаружить и предотвратить это? Спасибо!

1 ответ

Это не похоже на сложную проблему, однако она не была хорошо описана. Не могли бы вы привести лучший пример?

Вы используете шаблон MVVM? Я полагаю, что вы можете разбить представление на несколько моделей Views и View, например "CustomersListViewModel" и "CustomerDetailsViewModel".

Вы можете привязать ListBox к коллекции Customers и установить для "SelectItem" свойство с именем "SelectedCustomer" (в CustomersListViewModel), затем, когда выбор будет изменен в CustomersListBox, будет запущен метод с именем "SelectedCustomerChanged" или что-то подобное. аналогично, который, по сути, создал бы "CustomersDetailsViewModel" (передавая выбранного клиента в качестве параметра), и это отобразило бы новый CustomerDetails.

Для меня это звучит так, как будто у вас есть единственное представление, которое заменяет клиента, что может привести к возникновению проблемы с измененным выбором в вашем поле со списком. Клиентам

Пример:

CustomersListViewModel

  • Клиенты BindableCollection (привязаны к ListBox)
  • Клиент Выбранный Клиент (привязан к ListBox SelectedItem)
  • CustomerDetailViewModel CustomerDetailViewModel (привязанный к ContentControl)
  • SelectedCustomerChanged (запускается по событию ListBox SelectionChanged)

CustomerDetailViewModel (принимает объект Customer в параметрах конструктора)

  • Customer CurrentCustomer (привязать элементы управления к свойствам этого объекта Customer)

Метод SelectedCustomerChanged будет выглядеть примерно так...

public void SelectedCustomerChanged()
{
   this.CustomerDetailViewModel = new CustomerDetailViewModel(this.SelectedCustomer)
   // Replace this with some activation of view code?
   this.ActivateViewModel(this.CustomerDetailViewModel)
}

Это был бы мой подход?

Спасибо, надеюсь, это поможет.

Бен

Другие вопросы по тегам