我想在事件处理程序中添加一个事件。问题是我的EventHodeler在我的ViewModel中,我的事件在View中。如何从View访问我的ViewModel以挂起此事件?
感谢您的帮助
答案 0 :(得分:1)
由于视图模型设置为视图的DataContext
,您可以订阅视图的DataContextChanged
,并在处理程序中将DataContext
转换为视图模型的类型并附加期望事件处理程序像这样:
public class MyView : UserControl
{
public MyView()
{
InitializeComponent();
DataContextChanged += OnDataContextChanged;
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
MyViewModel viewModel = DataContext as MyViewModel;
if (viewModel != null)
{
viewModel.MyEvent += OnMyEvent;
}
}
}
答案 1 :(得分:1)
通常在MVVM中,当View想要将某些操作推迟到ViewModel
时,它通过绑定到ICommand来实现。这与使用事件的用法模型基本相同,因为View会将通知“推送”到ViewModel。
根据事件的性质,我建议您考虑使用ICommand进行,因为:
这让我觉得你正在寻找一种方法让ViewModel订阅来自View的UI事件,这与MVVM的前提相反。
在您的情况下调用ViewModel上的命令是否有问题?