我的WPF项目设置如下
在我的MainWindow中,我有一些标签。 SearchJob选项卡和编辑作业选项卡,选项卡显示各自的用户控件
他们都有自己的ViewModels作为他们的DataContext
MainWindow - MainWindowVM
SearchJobs - SearchJobsVM
EditJob - EditJobVM
在我搜索作业后,我得到一个绑定到Job对象的ObservableCollection的网格
当我双击结果网格时,我想让编辑选项卡可见,通过它的视图模型我双击的行的ID
我还想让我的MainWindow中的一些标签隐藏起来。选项卡绑定到MainWindowVM中的Visibility属性
我能够获得双击
的行的ID我的问题是,SearchJobsVm
我需要访问机器人MainWindowVM
来设置可见性属性,还可以访问EditJobVM
来设置ID
如何从MainWindowVM
访问EditJobVM
和SearcvhJobVM
的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>
答案 0 :(得分:1)
简单的方法是MainVM包含SearchJobsVM和EditJobVM的两个实例。现在,MainVM可以简单地处理所有内容。
例如,SearchJobVM会为您的doubleclick内容公开一个事件。 MainVM订阅此事件并将eventargs中的Id提供给EditJobVM,并将当前工作空间设置为EditJobVM。
EDIT。我会在您的子视图中使用DataTemplates,在MainView中使用contentPresenter。但您也可以使用TabControl并设置可见性
<DataTemplate DataType="{x:Type local:EditJobVM}">
<uc:EditJobUsercontrol/>
</DataTemplate>
的MainView
<ContentPresenter Content="{Biinding 'Workspace}"/>
MainVM
public object WorkSpace {get;set;}
this.Workspace = this._myInstanceOfEditJobVM; //now the EditJobView is shown in the contentpresenter