2015-07-10 101 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屬性設置爲函數的屬性。然後這個函數的內容就可以完成與你的代碼中的點擊函數中發現的相同的動作。然後,您可以訪問視圖模型中的所有對象。