ComboBox を使用して Contact3 を表示するか、Contact3 が null の場合は空白にします。
私の ViewModel には、以下のコントロールを含むスタック パネルの DataContext である CurrentSample プロパティがあります。
CurrentSample.Contact3 != null の場合、バインドは正常に機能します。
CurrentSample が Contact3==null の Sample に変更されると、TextBox バインディングは正常に機能しますが、ComboBox は最後の非 null 値を記憶します。
動作を示す簡単な例を作成しようとしましたが、うまくいきました! 私の簡単な例では、CurrentSample.Contact3==null の場合、コンボ ボックスは空白になります。
私の完全なプログラムは EF プロキシを使用しています。問題が発生しそうになると、バインディングの出力によって、DataObject がプロキシであることが示されます。
OurPeople2 をコレクションと CollectionViewSource にしてみました。null エントリの有無にかかわらず。
このプロジェクトを(別の)醜いクラッジから保存できるのはあなただけであることを忘れないでください...ニック(.Net 4.5)
<TextBox Text="{Binding Path=Contact3.Surname, Mode=OneWay}"/>
<ComboBox
ItemsSource="{Binding Source={StaticResource Locator}, Path=Main.OurPeople2}"
SelectedItem="{bindings:ChilliBinding Path=Contact3}"
DisplayMemberPath="Surname"
IsSynchronizedWithCurrentItem="True" />
わかった。問題はこれでした。ChilliBinding は、いくつかのパラメーターを含む便利なクラスです。
public class ChilliBinding:Binding
{
public ChilliBinding():base()
{
Mode=BindingMode.TwoWay;
UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
ValidatesOnDataErrors = true;
NotifyOnValidationError = true;
TargetNullValue = "";
}
}
TargetNullValue を使用すると、ユーザーはテキスト ボックスに空の文字列を入力して null 値を指定できます。ComboBox では機能しません。おそらく、バインディングはビューモデルの null 値を "" に変換しようとして、コンボボックスでその値を見つけることができません。
TargetNullValue を未設定のままにする新しい便利なクラス ChilliBindingForCombo を導入しました。ところで、コンボの値をnullに設定するには、ラベル、コンボボックス、および「コンボをnullに設定」ボタンを含むUserControlがあるため、コンボボックスに空の値を設定する必要はありません。