2012-04-06 18 views
0

我正在使用MVVM編寫WPF應用程序,我很困惑我應該如何處理從視圖到我的ViewModel的EventArgs的自定義路由。附加行爲或Interaction.Triggers?

我有一個名爲 - 我的虛擬機上的CurrentIndex屬性,在我看來這是綁定到一個控件;

值= 「{結合CURRENTINDEX}」

這種控制具有其自己的一組的EventArgs時的控制的值發生變化(即,IndexValueChangedEventArgs)。

我想了解如何觸發此事件,並有權訪問我的ViewModel的當前狀態,以便我可以相應地更新視圖模型。

我試圖用EventTrigger(它調用命令,但它綁定到我的虛擬機,所以我不能從控件獲取自定義事件參數)並創建了一個附加的行爲,使我可以訪問自定義EventArgs但與我的VM沒有關係。

我不知道我在模式中做了什麼錯誤,我想要做的就是從ControlA獲取EventArgs,將它們與可以與我的虛擬機進行交互並進行相應更新。

謝謝。

回答

0

基本上,您不會將視圖中的EventArgs路由到ViewModel,而是使用綁定。

你的ViewModel應該實現INotifyPropertyChanged。這裏有各種各樣的樣板實現,但是你自己做起來並不難,例如現在

public class MyViewModel : INotifyPropertyChanged 
{ 
    #region Implementation of INotifyPropertyChanged 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 

    private void RaisePropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if(handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    private int _currentIndex; 
    public int CurrentIndex 
    { 
     get { return _currentIndex; } 
     set 
     { 
      if (value != _currentIndex) 
      { 
       _currentIndex = value; 
       RaisePropertyChanged("CurrentIndex"); 
      } 
     } 
    } 
} 

您的觀點將與使用綁定更改您的視圖模型同步您已經

Value="{Binding CurrentIndex}" 

假設當然視圖的DataContext設置您的視圖模型的實例。

+0

是的,我正在這樣做,這適用於將更改從我的數據推送到用戶界面。我感興趣的是在UI上處理來自Controls的事件。也就是說,我有一個文本框,我連接了KeyDown事件,我想訪問KeyEventArgs中的數據,並對我在ViewModel中運行的代碼進行評估。對於我的命令參數,我主要傳入當前的{Binding}上下文,這是我的虛擬機,但是我無法訪問事件參數。 – 2012-04-07 00:33:51

+0

我明白了。我不知道如何在MVVM中做到這一點。交互觸發器將無濟於事。我對連接的行爲不夠了解。也許是時候瞭解:) – Phil 2012-04-07 07:19:03