2010-11-24 58 views
1

私のxamlでは、私は左にCustomersのListBoxを持っています。顧客が選択されると、顧客の情報(名前、住所、電話番号、種類など)がバインドテキストボックスまたはコンボボックスに表示されます。WPF Combobox SelectionChangedレコードバインディング

右側は、値が変更されたときに値を入力するSelectionChangedイベントを持つコンボボックスです。問題は、左側のListBoxで別の顧客を選択するたびに、Type SelectionChangedイベントが発生して値を入力することです。これを検出してこれを防ぐ方法を教えてください。ありがとう!

答えて

0

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

MVVMパターンを使用していますか?私は、 "CustomersListViewModel"や "CustomerDetailsViewModel"のように、ビューとビューの複数のモデルにビューを分解することができると思います。

CustomersのコレクションにListBoxをバインドし、CustomersListViewModel内の "SelectedCustomer"というプロパティに "SelectItem"を設定すると、CustomersListBoxで選択が変更されたときに、 「SelectedCustomerChanged」またはこれに類似したもので、「CustomersDetailsViewModel」(選択した顧客をパラメータとして渡す)を本質的に新しくするものであり、これにより新しいCustomerDetailsが表示されます。

あなたのコンボボックスでセレクションチェンジされたイベントを粗く発火させて、お客様の問題を引き起こしてしまう、単一のビューを顧客に出しているように聞こえます。お客様の ン

例:(リストボックスにバインド)

CustomersListViewModel

  • BindableCollectionお客様
  • にバインド(ListBoxコントロールのSelectedItemにバインド)カスタマーSelectedCustomer
  • CustomerDetailViewModel CustomerDetailViewModel( ContentControl)
  • SelectedCustomerChanged(リストボックスSelectionChangedイベントに発砲)

CustomerDetailViewModel(コンストラクタのparamsでCustomerオブジェクトを受け入れ)

  • 顧客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イベントが発生したと思います。 ComboBoxドロップダウンリストの変更から直接変更されていないときに、ComboBox SelectionChangedが実行されないようにする方法を知っておく必要があります。 – Seecott