2012-12-05 3 views
0

짧은 이야기Silverlight에서 콤보 상자 선택을 취소하려면 어떻게해야합니까?

내가 내가 내가 (BindingExpression.UpdateSource를 호출하여) 소스와 함께 할 수있는 것처럼 바인딩의 대상 측을 업데이트 할하는 BindingExpression 개체가 있습니다. 내가 어떻게 해?

내가 실버 라이트에 적응하는 방법을 모른다 WPF에 대한 비슷한 질문이있다 : Cancel combobox selection in WPF with MVVM

긴 이야기

이가 콤보 상자의 selectedItem가 결합 결합 양방향을 감안할 뷰 모델의 속성 콤보 박스는 네비게이션에 사용되므로 사용자를 선택하면 뷰 모델이 멀리 탐색하도록 지시합니다. 뷰 모델에는 사용자가 우연히 느슨하게하고 싶지 않은 몇 가지 저장되지 않은 변경 사항이있을 수 있습니다. 따라서 뷰 모델은 사용자가 실제로 탐색하고 변경 사항을 잃고 싶은지 확인하는 확인 대화 상자를 표시합니다. 사용자가 아니오라고하면, 우리는 콤보 박스에 대한 선택을 취소하기를 원한다. 그래서 네비게이션 시도가 이루어지기 전과 같은 원래의 상태가된다. 내가 어떻게 해? 주의 사항 WPF의 사람들을 위해

, 거기에 (내가 아는 한) 실버 라이트에는 UpdateTarget 방법이 없기 때문에이 문제가 제기 된 이유입니다.

답변

1

올바르게 이해하면 속성이 변경 될 때 SelectedItem 백업 필드의 이전 값을보기 모델의 atrribute에 저장해야하며 사용자가 확인 대화 상자를 취소하기로 결정한 경우 SelectedItem을 복원해야합니다 backing 필드를 이전 값으로 설정합니다. 당신이 dependencie 속성을 사용하는 경우, 당신이

private object selectedItemPreviousValue; 
    private object selectedItemBackingField; 
    public object SelectedItemBackingField 
    { 
     get 
     { 
      return selectedItemBackingField; 
     } 
     set 
     { 
      selectedItemPreviousValue = selectedItemBackingField; 
      selectedItemBackingField = value; 
     } 
    } 

가있는 PropertyMetada을 제공 : 당신이 백업 필드에 대한 일반 속성을 사용하는 경우

,이 동작을 구현하는 설정 방법을 쓸 수 있습니다 DependencyPropertyChantged 콜백, 다음과 같이 입력하십시오 :

public object SelectedItemBackingField 
    { 
     get { return (object)GetValue(SelectedItemBackingFieldProperty); } 
     set { SetValue(SelectedItemBackingFieldProperty, value); } 
    } 

    // Using a DependencyProperty as the backing store for SelectedItemBackingField. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty SelectedItemBackingFieldProperty = 
     DependencyProperty.Register("SelectedItemBackingField", typeof(object), typeof(MapApp), new PropertyMetadata(new PropertyChangedCallback(OnSelectedItemChanged)); 

    public static OnSelectedItemChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) 
    { 
     MyViewModel vm = (MyViewModel)sender; 
     vm.selectedItemPreviousValue = args.OldValue; 
    } 
+0

그래, 결국이 일을 끝냈습니다. 그러나 나는 누군가가 BindingExpression 객체를 가진 바인딩의 타겟면을 손으로 업데이트하는 방법을 알려주기를 바랍니다. –

관련 문제