1

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

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

4

1 回答 1

0

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

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

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

在我看来,你有一个单一的视图正在交换一个客户,这会粗略地触发你的组合框上的 selectionchanged 事件,从而导致你的问题。客户化

例子:

客户列表视图模型

  • 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)
}

那会是我的方法吗?

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

于 2010-11-26T13:29:06.090 回答