1

私の xaml では、左側に Customers の ListBox があります。顧客が選択されると、右側に顧客情報 (名前、住所、電話番号、タイプなど) がバインド テキスト ボックスまたはコンボ ボックスに表示されます。

右側の Type は、値が変更されたときに何かを入力する SelectionChanged イベントを持つコンボボックスです。問題は、左側の ListBox で別の顧客を選択するたびに、Type SelectionChanged イベントも発生して値が入力されることです。どうすればこれを検出して防止できますか? ありがとう!

4

1 に答える 1

0

複雑な問題のようには聞こえませんが、うまく説明されていません。より良い例を教えてください。

MVVM パターンを使用していますか? たとえば、「CustomersListViewModel」と「CustomerDetailsViewModel」のように、ビューを複数のビューとビュー モデルに分割できると思います。

ListBox を Customers のコレクションにバインドし、"SelectItem" を "SelectedCustomer" (CustomersListViewModel 内) というプロパティに設定すると、CustomersListBox で選択が変更されると、"SelectedCustomerChanged" などのメソッドが呼び出されます。同様に、基本的に「CustomersDetailsViewModel」を新規作成し (選択した顧客をパラメーターとして渡す)、これにより新しい CustomerDetails が表示されます。

顧客を交換している単一のビューがあるように思えます。これにより、コンボボックスで selectionchanged イベントが発生し、問題が発生します。お客様の

例:

CustomersListViewModel

  • BindableCollection Customers (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 に答える