2012-12-05 18 views
0

短篇小說如何取消Silverlight中的組合框選擇?

我有一個BindingExpression對象,我想更新的目標一側的結合,就像我可以與源做到這一點(通過調用BindingExpression.UpdateSource)。我該怎麼做?

沒有爲WPF中類似的問題,我不知道如何去適應的Silverlight:給定一個雙向綁定結合的組合框的selectedItem設置Cancel combobox selection in WPF with MVVM

說來話長

視圖模型的屬性。組合框用於導航,以便通過選擇用戶告訴視圖模型導航離開。視圖模型可能會有一些未保存的更改,用戶不希望意外鬆動。因此,視圖模型會拋出一個確認對話框,詢問用戶是否真的想要導航並放棄其更改。如果用戶說「否」,我們想要撤消對組合框的選擇,以使其處於原始狀態,就像在進行導航嘗試之前一樣。我該怎麼做?

對於WPF人 請注意,有在Silverlight沒有UpdateTarget方法(據我所知),所以這就是爲什麼這個問題被提出了。

回答

1

如果我理解正確,當屬性發生變化時,您應該將之前的SelectedItem支持字段的值存儲在您的視圖模型上的atrribute上,並且當用戶決定取消確認對話框時,您應該還原SelectedItem支持字段爲以前的值。

如果您使用常規屬性的支持字段,你可以寫一個實現此行爲的設置方法:

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

如果您使用dependencie性能,你必須提供一個一個PropertyMetadaDependencyPropertyChantged回調,像這樣:

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對象綁定的目標端。 –

相關問題