WPF Combobox SelectionChanged记录绑定

时间:2010-11-24 05:23:56

标签: wpf combobox listbox selectionchanged

在我的xaml中,左侧有一个CustomersBox列表框。选择客户后,右侧将显示绑定文本框或组合框的客户信息(名称,地址,电话,类型等)。

在右侧,Type是一个组合框,其中包含SelectionChanged事件,在更改值时填充某些内容。问题是每当我在左侧的ListBox中选择不同的客户时,Type SelectionChanged事件也会启动并填充值。如何检测并防止这种情况发生?谢谢!

1 个答案:

答案 0 :(得分:0)

它听起来不像一个复杂的问题,但它没有得到很好的描述。你能举个更好的例子吗?

您使用的是MVVM模式吗?我想你可以将视图分解为多个视图和视图模型,例如“CustomersListViewModel”和“CustomerDetailsViewModel”。

您可以将ListBox绑定到Customers集合,并将“SelectItem”设置为名为“SelectedCustomer”的属性(在CustomersListViewModel中),然后在CustomersListBox中更改选择时,它将触发一个名为“SelectedCustomerChanged”的方法“或类似的东西本质上是新的”CustomersDetailsViewModel“(将选定的客户作为参数传递),这将显示新的CustomerDetails。

听起来我觉得你有一个单一的视图正在交换一个客户,这会粗暴地点燃你的组合框中的选择变更事件,从而导致你的问题。 客户

示例:

<强> CustomersListViewModel

  • BindableCollection客户(绑定到ListBox)
  • Customer SelectedCustomer(Bound to ListBox SelectedItem)
  • CustomerDetailViewModel CustomerDetailViewModel(绑定到ContentControl)
  • SelectedCustomerChanged(在ListBox SelectionChanged事件中被触发)

CustomerDetailViewModel (接受构造函数参数中的Customer对象)

  • Customer CurrentCustomer(Bind 对此属性的控制 客户对象)

“SelectedCustomerChanged”方法看起来像这样......

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

那是我的方法吗?

谢谢,希望这有帮助。