だから列挙型があるとして、PropertyChangedWPF双方向バインディングと
enum SampleEnum
{
Item1,
Item2
}
その後
<ComboBox ItemsSource="{Binding SomeItemSource}"
SelectedItem="{Binding
Path=ItemX,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource ResourceKey=SomeConverter}}">
コンボボックスはそのDataContext
ViewModel : INotifyPropertyChanged, ...
{
...
public SampleEnum ItemX
{
get => model.GetItemX();
set
{
model.SetItemX(value);
RaisePropertyChanged();
}
}
...
}
そしてRaisePropertyChanged([CallerMemberName] string caller = "")
としてのViewModelを持つコンボボックスがありますプロパティの名前を持つPropertyChanged
を呼び出します。
しかし、。
私は私のコードを実行すると、私のCheckBox
を開くには、一つの項目を選択し、私は次の動作を取得する:私のコードは、セッターに入り、値が取得され、その後、私のゲッターが呼び出され、にPropertyChangedを発生させ、モデルの値を設定し、それ決してComboBox
には達しません。 ComboBox
は、私が手で選択した値を表示します。アクセサーによって返された値ではありません。
など。同じ値を返すようにget => SampleEnum.Item2
を書き換えると、ComboBox
は、getterが呼び出されたことを100%確信しているにもかかわらず、自分の手でUIで選択した値を、アクセサーによって返された値ではなく、コンバーターにも適切な値が返されます。
しかしRaisePropertyChanged(nameof(ItemX))
が他の場所から呼び出された場合、ComboBox
はすぐにアクセサから値を取得し、それを表示します。
つまり、ComboBox
は、setterから呼び出された場合はPropertyChanged
を無視しますが、それ以外の場合は完全に正常です。コンパイラサービスに頼る代わりにプロパティの名前を直接指定するか、setterの行に複数のRasiePropertyChangedを呼び出すことはできません。
一般に、コンボボックスで選択された値とgetterによって返された値は同じですが、モデルによっては指定された値が拒否され、デフォルトの値が返されることがあります。最高の行動ではありませんが、可能です。そしてこの場合、ユーザは実際にComboBox
のどの項目が誤って選択されるでしょうか。
私はちょうどComboBoxがそれを無視するこのアクセサについて特別なのだろうかと思っています。