我正在使用MVVM编写WPF应用程序,我很困惑应该使用什么来处理从View到ViewModel的EventArgs自定义路由。
我的VM上有一个名为 - CurrentIndex的属性,在我看来,它绑定到一个控件;
Value =“{Binding CurrentIndex}”
当控件的值发生更改时,此控件具有自己的EventArgs集(即IndexValueChangedEventArgs)。
我试图了解如何触发此事件并访问ViewModel的当前状态,以便我可以相应地更新viewmodel。
我尝试使用EventTrigger执行此操作(它调用命令但它绑定到我的VM,因此我无法从控件获取自定义事件args)并创建了一个附加行为,这使我可以访问自定义EventArgs但是与我的VM无关。
我不确定我在模式中做错了什么,我想要做的就是将ControlA中的EventArgs转换成可以与我的VM交互并相应更新的内容。
感谢。
答案 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设置为视图模型的实例。