2017-11-29 8 views
0

caliburn.micro MVVMプロジェクトでは、複数のコンボボックスがあります。それらは、ドロップダウンに表示する値を計算するプロパティにバインドされています。私はComboBox1の上の値を設定し、SelectedComboBox1、デフォルトとして値2を設定しますRefObject.SetValue1関数を呼び出すとき複数のコンボボックスがソースに依存する

public string SelectedComboBox1 
{ 
    get { return RefObject.Value1; } 
    set { 
     RefObject.SetValue1(value); 

     NotifyOfPropertyChange(() => ComboBox2Source); 
     NotifyOfPropertyChange(() => SelectedComboBox2); 
    } 
} 
public List<string> ComboBox1Source 
{ 
    get { return CalculateComboBox1(); } 
} 
public string SelectedComboBox2 
{ 
    get { return RefObject.Value2; } 
    set { RefObject.SetValue2(value); } 
} 
public List<string> ComboBox2Source 
{ 
    get { return CalculateComboBox2(RefObject.Value1); } 
} 

問題があります。

私はソースと値を変更した通知を呼び出しようとしました。ソースは更新されますが、それが実行されるとnullパラメータでSelectedComboBox2が呼び出されます。それは値をnullに設定します。

プログラムの流れ:

  • すべてのソースと値が正しく設定されています。
  • ComboBox1の値「ComboBox1の値1」を持ち、ComboBox2に値 を持っている「combobox2値1」の変更ComboBox1のは「ComboBox1の値2」
  • 言うことができますしSelectedComboBox1が呼び出され、RefObject.SetValue1が呼び出されます。 この関数は、Value1とも値2をRefObjectに変更します。 RefObject.Value2の値が "combobox2 value2"で、 がinit()のComboBox2Sourceに存在しない値です。
  • 私はComboBox2SourceのNotifyOfPropertyChangeを呼び出し、更新され、 "combobox2 value2"の値がソースに存在しますが、WPFはSelectedComboBox2をvalue = nullで設定して呼び出します(これは、通知されたt)

私はNotifyOfPropertyChange(()=> SelectedComboBox2を呼び出します);最初に、値はソースに存在しないため、設定することはできません。

これを処理する最善の方法は何ですか?

答えて

0

SelectedComboBox1が呼び出され、RefObject.SetValue1が呼び出されます。 この関数は、Value1とも値2をRefObjectに変更します。この時点で

、私はあなたの新しいアイテムは基本的にSelectedComboBox2の値はComboBox2Sourceにないものに設定されることはありませんことを強制する、コレクション内にあることを確認してくださいと思います。 (

if (!ComboBox2Source.Contains(value)) 
{ 
    ComboBox2Source.Add(value) 
} 
+0

しかし、私は、私はNotifyOfPropertyChangeをしなければならないでしょうComboBox2Sourceを更新したことを通知する:だからどこかRefObject.SetValue1で、またRefObject.Value2を変える部分で

、私はRefObject.Value2を設定する前に、このようなものが含まれるだろう()=> ComboBox2Source)。 – Trixz

+0

新しい値が 'ComboBox2Source'にあれば' SelectedComboBox2'を 'null'を返さずに設定できるはずですか? 'RefObject'や計算方法など、コードをもっと投稿できますか? –

関連する問題