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)
}
Это был бы мой подход?
Спасибо, надеюсь, это поможет.
Бен