그래서 열거가 가정하여 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 = "")
로 뷰 모델이있는 콤보 상자가 속성 이름이있는 PropertyChanged
을 호출합니다.
그러나. 내 코드를 실행하면
, 내 CheckBox
열 한 항목을 선택, 내가 행동 다음 얻을 : 내 코드, 세터를 입력 모델의 값을 설정하여 PropertyChanged이 제기 한 다음 내 게터가 호출, 값이 검색되고, 하지만 결코ComboBox
에 도달하지 않습니다. ComboBox
은 접근 자에 의해 반환 된 값이 아니라 내가 직접 선택한 값을 표시합니다.
예. 항상 동일한 값을 반환하기 위해 get => SampleEnum.Item2
을 다시 쓰면 ComboBox
은 getter가 호출 된 것임을 확신하지만 getter가 반환 된 값이 아니라도 접근자가 반환 한 값이 아니라 UI에서 내 손으로 선택한 값을 계속 표시합니다. to Converter 및 Convrter도 적절한 값을 반환합니다.
그러나RaisePropertyChanged(nameof(ItemX))
경우가 다른 곳에서 호출, ComboBox
즉시 접근에서 값을 검색하고 표시합니다.
간단히 말해서 ComboBox
은 setter에서 호출하면 PropertyChanged
을 무시하지만 다른 경우에는 완벽하게 정상적으로 작동합니다. 컴파일러 서비스에 의존하는 대신 속성의 이름을 직접 지정하거나 setter의 행에서 여러 RasiePropertyChanged를 호출하면 작동하지 않습니다.
일반적으로 콤보 상자에서 선택한 값과 getter에서 반환 한 값이 같지만 모델에서 제공된 값을 거부하고 대신 기본값을 반환 할 수 있다고 예상해야합니다. 최고의 행동은 아니지만 가능합니다. 그리고이 경우 실제로 사용자가 ComboBox
의 어떤 항목을 잘못 알게됩니다.
ComboBox가 무시하는이 접근 자에 대해 특별한 점이 있습니다.