Wpf 附加行为或互动。触发因素?

Wpf 附加行为或互动。触发因素?,wpf,mvvm,Wpf,Mvvm,我正在使用MVVM编写一个WPF应用程序,我不知道应该使用什么来处理EventArgs从视图到ViewModel的自定义路由 在我的虚拟机上有一个名为-CurrentIndex的属性,在我的视图上它绑定到一个控件 值={Binding CurrentIndex} 当控件的值更改时(即IndexValueChangedEventArgs),此控件有自己的一组EventArgs 我试图了解如何触发此事件并访问ViewModel的当前状态,以便相应地更新ViewModel 我尝试使用调用命令的Even

我正在使用MVVM编写一个WPF应用程序,我不知道应该使用什么来处理EventArgs从视图到ViewModel的自定义路由

在我的虚拟机上有一个名为-CurrentIndex的属性,在我的视图上它绑定到一个控件

值={Binding CurrentIndex}

当控件的值更改时(即IndexValueChangedEventArgs),此控件有自己的一组EventArgs

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

我尝试使用调用命令的EventTrigger执行此操作,但它已绑定到我的VM,因此我无法从控件中获取自定义事件参数,并创建了一个附加行为,该行为允许我访问自定义事件参数,但与我的VM无关

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


谢谢。

基本上,您不需要将事件参数从视图路由到视图模型,而是使用绑定

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设置为视图模型的一个实例。

是的,我正在这样做,这对于将对的更改从数据推送到UI非常有效。我感兴趣的是从UI上的控件处理事件。也就是说,我有一个文本框,我连接了KeyDown事件,我想访问KeyEventArgs中的数据,并根据ViewModel中运行的代码对其进行评估。对于我的命令参数,我主要是在当前的{Binding}上下文中传递,它是我的VM,但是我没有访问事件参数的权限。我不知道你怎么能在MVVM中做到这一点。交互触发器不会有帮助。我对依恋行为了解不够。也许是时候学习了: