我想添加一个事件到我的事件处理程序。问题是我的EventHandler在我的ViewModel中,而我的事件在View中。如何从视图访问我的ViewModel以挂起此事件?挂在处理程序的视图中的事件处理程序
感谢您的帮助
我想添加一个事件到我的事件处理程序。问题是我的EventHandler在我的ViewModel中,而我的事件在View中。如何从视图访问我的ViewModel以挂起此事件?挂在处理程序的视图中的事件处理程序
感谢您的帮助
由于视图模型被设置为,您可以订阅该视图的DataContextChanged
视图DataContext
并在处理程序铸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;
}
}
}
通常在MVVM,当查看希望如此通过结合一个ICommand推迟一些操作它的ViewModel
。这与事件的使用模型基本相同,因为View会将通知“推送”到ViewModel。
根据事件的性质,我建议你看看与一个ICommand这样做,因为:
Whic h导致我认为你正在寻找一种方法让ViewModel从View中订阅一个UI事件,这与MVVM的前提相反。
在你的情况下调用ViewModel有问题的命令?
嗨,乔恩,我有一个问题,改变我的看法。我有不同的页面。我有一个导航类,可以导航到每个页面。这个导航类在我看来,所以我不能从我的ViewModel调用它。我需要这个在我的视图,因为我传递一些对象到我的新视图,所以我不能把我的ViewModels我的导航类。我希望我解释了我的问题。 – holzleube 2011-04-04 20:40:03
你是怎么说的。 F.E. DataContextChanged(){...} – holzleube 2011-04-04 20:15:52
感谢您的帮助 – holzleube 2011-04-04 20:19:12
注意我需要将签名更改为: 私人无效OnDataContextChanged(对象发件人,DependencyPropertyChangedEventArgs e) – darwindave 2013-05-15 02:06:20