2011-04-04 96 views

回答

1

由于视图模型被设置为,您可以订阅该视图的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; 
     } 
    } 
} 
+0

你是怎么说的。 F.E. DataContextChanged(){...} – holzleube 2011-04-04 20:15:52

+0

感谢您的帮助 – holzleube 2011-04-04 20:19:12

+0

注意我需要将签名更改为: 私人无效OnDataContextChanged(对象发件人,DependencyPropertyChangedEventArgs e) – darwindave 2013-05-15 02:06:20

1

通常在MVVM,当查看希望如此通过结合一个ICommand推迟一些操作它的ViewModel。这与事件的使用模型基本相同,因为View会将通知“推送”到ViewModel。

根据事件的性质,我建议你看看与一个ICommand这样做,因为:

  • 背后MVVM整体思路是视图模型来假定视图是“真正的” UI
  • 然而,一般而言,查看真正的UI(所以你可能提到的事件有什么东西在UI发生这样做)

Whic h导致我认为你正在寻找一种方法让ViewModel从View中订阅一个UI事件,这与MVVM的前提相反。

在你的情况下调用ViewModel有问题的命令?

+0

嗨,乔恩,我有一个问题,改变我的看法。我有不同的页面。我有一个导航类,可以导航到每个页面。这个导航类在我看来,所以我不能从我的ViewModel调用它。我需要这个在我的视图,因为我传递一些对象到我的新视图,所以我不能把我的ViewModels我的导航类。我希望我解释了我的问题。 – holzleube 2011-04-04 20:40:03