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

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

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


person Seecott    schedule 24.11.2010    source источник


Ответы (1)


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

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

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

Мне кажется, что у вас есть одно представление, которое меняет клиента, что грубо запускает событие selectionchanged в вашем поле со списком, вызывая вашу проблему. клиентов

Пример:

CustomersListViewModel

  • Клиенты BindableCollection (с привязкой к ListBox)
  • Customer SelectedCustomer (привязан к 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)
}

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

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

Бен

person BenjaminPaul    schedule 26.11.2010
comment
Привет, Бен, я не использую шаблон MVVM. Это приложение WPF, использующее EF для данных. Я загружаю Listbox с клиентами. Когда клиент выбран, DataContext Windows устанавливается в SelectedItem. Я считаю, что событие ComboBox SelectionChanged сработало, потому что тип меняется каждый раз, когда выбирается новый клиент. Мне нужно знать, как предотвратить выполнение ComboBox SelectionChanged, когда изменение не происходит непосредственно из изменения раскрывающегося списка ComboBox. - person Seecott; 26.11.2010