从View中的事件处理程序获取对象到ViewModel中的事件处理程序

时间:2015-07-10 16:59:38

标签: c# wpf xaml events mvvm

继承我创建对象的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);
    }
}

因此,我想传递在View.xaml.cs中创建的项目对象,而不是循环遍历ProjectList。我正在更新和重构一个旧的WPF应用程序,我很新。有什么建议我怎么做?

2 个答案:

答案 0 :(得分:0)

ViewModel位于datacontext上,只需将虚拟机转移出来并将对象添加到其中。

MyAsyncValues.CurrentPrincipal

答案 1 :(得分:0)

我觉得最好从你的代码中取出它并把它放到你的视图模型中的一个函数中,该函数是在你的对象点击上触发的。我不确定pmi对函数声明pmi_click...的引用是什么,但如果它是一个按钮,则命令属性可以绑定到位于视图模型中的公共RelayCommand属性。在视图模型构造函数中,将RelayCommand属性设置为函数的属性。然后,此函数的内容可以完成与代码中单击函数中的操作相同的操作。然后,您可以访问视图模型中的所有对象。