0

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

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

值="{绑定 CurrentIndex}"

当控件的值发生变化时,该控件有自己的一组EventArgs(即IndexValueChangedEventArgs)。

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

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

我不确定我在模式中做错了什么,我想做的就是将 EventArgs 从 ControlA 获取到可以与我的 VM 交互并相应更​​新的东西中。

谢谢。

4

1 回答 1

0

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

于 2012-04-06T15:14:11.793 回答