2015-07-10 80 views
0

我的继承人 - 在对象被创建充分利用事件处理程序的视图对象在视图模型的事件处理程序

查看View.xaml.cs代码

void pmi_Click(object sender, RoutedEventArgs e) 
{ 
    MenuItem mi = sender as MenuItem; 

    int projectKey = 0; 
    projectKey = (int)mi.Tag; 
    Project_VM project; 
    foreach (var p in GlobalVars._instance.ProjectList) 
    { 
     if (projectKey == p.ClarityId) 
     { 
      project = new Project_VM(p.Model); 
      Main winMain = Window.GetWindow(this.VisualParent) as Main; 

      winMain.Projects.SelectedItem = project; 
      winMain.Projects.ScrollIntoView(project); 
     } 

    } 

} 

我需要图找出一种方法将该对象传递给ViewModel中的事件处理程序,该事件处理程序使用委托来订阅事件。的

视图模型

void _selectedProject_ChangerSelectedProj(object o, SelectionProjEventArgs e) 
{ 

    foreach (var p in _globalVars.ProjectList) 
    { 
     if (p.ClarityId.Equals(e.projectKey)) 
      changeSelectedProject(p); 
    } 
} 

因此,而不是通过ProjectList循环,我想通过在View.xaml.cs.创建的项目对象我正在更新和重构一个旧的WPF应用程序,并且它对我来说很新颖。任何建议如何我可以做到这一点?

回答

0

ViewModel位于datacontext上,只需简单地将VM关闭并向其添加对象即可。

var myVM = DataContext as MyViewModel ; 

if (myVM != null) 
    myVM.TargetEventHandler .... 
0

我会觉得好像它会更好地利用这一点的后面的代码,并把它放入您的视图模型的功能是在你的对象点击解雇。我不确定pmi参考函数声明pmi_click...,但如果它是一个按钮,则命令属性可以绑定到位于视图模型中的公共RelayCommand属性。在您的视图模型构造函数中,您将RelayCommand属性设置为函数的属性。然后这个函数的内容就可以完成与你的代码中的点击函数中发现的相同的动作。然后,您可以访问视图模型中的所有对象。