2010-11-24 204 views
1

在我的xaml中,我有一个左侧的Customers列表框。选择客户后,右侧会显示客户信息(姓名,地址,电话,类型等)到绑定文本框或组合框。WPF Combobox SelectionChanged记录绑定

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

回答

0

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

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

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

这听起来像你有一个单一的视图是交换了一个客户,这将粗暴地触发组合框上的choosechanged事件,导致你的问题。顾客 灰

实施例:

CustomersListViewModel

  • BindableCollection客户(绑定到列表框)
  • 顾客SelectedCustomer(绑定到列表框的SelectedItem)
  • CustomerDetailViewModel CustomerDetailViewModel(绑定到一个ContentControl)
  • SelectedCustomerChanged(烧制上列表框SelectionChanged事件)

CustomerDetailViewModel(接受在构造PARAMS一个客户对象)

  • 顾客CurrentCustomer(绑定 控件属性此 客户对象上)

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

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

这将是我的方法?

谢谢,希望这会有所帮助。

+0

嗨本,我没有使用MVVM模式。这是一个使用EF来处理数据的WPF应用程序。我加载客户的列表框。当选择一个客户时,窗口DataContext被设置为SelectedItem。我相信ComboBox SelectionChanged事件启动了,因为每次选择一个新客户时,Type都会改变。我需要知道如何在更改不是直接从ComboBox下拉列表更改时阻止ComboBox SelectionChanged执行。 – Seecott 2010-11-26 19:52:23