我的WPF项目设置如下
在我的MainWindow中,我有一些标签 . “搜索工作”选项卡和“编辑作业”选项卡,选项卡显示各自的用户控件
它们都有自己的ViewModels作为DataContext
MainWindow - MainWindowVM
SearchJobs - SearchJobsVM
EditJob - EditJobVM
在我搜索作业后,我得到了一个绑定到Job对象的ObservableCollection的网格
当我双击结果网格时,我想让编辑选项卡可见,通过它的视图模型我双击的行的ID
我还想让我的MainWindow中的一些选项卡不可见 . 选项卡绑定到MainWindowVM中的Visibility属性
我能够获得双击的行的id
我的问题是,从 SearchJobsVm
我需要访问机器人 MainWindowVM
来设置可见性属性并访问 EditJobVM
来设置ID
如何从 SearcvhJobVM
访问 MainWindowVM
和 EditJobVM
的DataContext(视图模型)?
在Mainwindow中我像这样设置DataContext: -
<Window.DataContext>
<vm:MainWindowViewModel />
</Window.DataContext>
并且像xaml一样添加用户控件
<TabItem Header="Search">
<Grid Background="#FFE5E5E5">
<uc:SearchJobView></uc:SearchJobView>
</Grid>
</TabItem>
我的SearchJobView的DataContext设置如下: -
<UserControl.DataContext>
<vm:SearchJobViewModel/>
</UserControl.DataContext>
我对EditJobView的DataContext设置如下: -
<UserControl.DataContext>
<vm:JobViewModel/>
</UserControl.DataContext>
1 回答
简单的方法是MainVM包含SearchJobsVM和EditJobVM的两个实例 . 现在,MainVM可以简单地处理所有内容 .
例如,SearchJobVM会为您的doubleclick内容公开一个事件 . MainVM订阅此事件并将eventargs中的Id提供给EditJobVM,并将当前工作空间设置为EditJobVM .
编辑 . 我会在您的子视图中使用DataTemplates,在MainView中使用contentPresenter . 但您也可以使用TabControl并设置Visibility
的MainView
MainVM