附加行为或Interaction.Triggers?

时间:2012-04-06 14:39:47

标签: wpf mvvm

我正在使用MVVM编写WPF应用程序,我很困惑应该使用什么来处理从View到ViewModel的EventArgs自定义路由。

我的VM上有一个名为 - CurrentIndex的属性,在我看来,它绑定到一个控件;

Value =“{Binding CurrentIndex}”

当控件的值发生更改时,此控件具有自己的EventArgs集(即IndexValueChangedEventArgs)。

我试图了解如何触发此事件并访问ViewModel的当前状态,以便我可以相应地更新viewmodel。

我尝试使用EventTrigger执行此操作(它调用命令但它绑定到我的VM,因此我无法从控件获取自定义事件args)并创建了一个附加行为,这使我可以访问自定义EventArgs但是与我的VM无关。

我不确定我在模式中做错了什么,我想要做的就是将ControlA中的EventArgs转换成可以与我的VM交互并相应更​​新的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

基本上,您不会将ViewArgs从View路由到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设置为视图模型的实例。