假设在ParentView.xaml中有一个名为ParentUserControl的用户控件。在后面的代码中,我已经设置了ParentViewModel的实例 DataContext的。在ParentUserControl中有一个ChildUserControl。如何在childUserControl中访问ParentViewModel又名ParentUserControl的DataContext? 查看模型以及相反的方式如何在parentViewModel中访问childviewmodel。
ParentView.xaml
<UserControl x:Class="Test.ParentView"
mc:Ignorable="d"
Name="ParentUserControl"
>
<UserControl.Resources>
<ControlTemplate x:Key="ChildControlTemplate">
<control:ChildUSerControl/>
</ControlTemplate>
</UserControl.Resources>
<Grid>
<Border Grid.Row="0" BorderBrush="{StaticResource BorderBrush}" BorderThickness="0,0,0,0">
<ContentControl Name="ChildControlTemplate" Width="Auto" ></ContentControl>
</Border>
</Grid>
</UserControl>
ParentView.xaml.cs
public ParentView()
{
ParentViewModel parentViewModel = new ParentViewModel();
this.DataContext = parentViewModel;
ChildUSerControl childUserControl = new ChildUserControl();
InitializeComponent();
ChildControlTemplate.Content = childUserControl;
}
答案 0 :(得分:0)
如果使ChildViewModel成为ParentViewModel的属性(在下面的示例中为ChildVM),则可以将其连接为XAML中ChildUserControl的DataContext。当你在它时,你可以在XAML中创建ParentViewModel而无需在后面的代码中执行它。类似的东西:
<UserControl x:Class="Test.ParentView"
xmlns:vm="clr-namespace:NamespaceForYourParentViewModel"
mc:Ignorable="d"
Name="ParentUserControl"
>
<UserControl.DataContext>
<vm:ParentViewModel />
</UserControl.DataContext>
<UserControl.Resources>
<ControlTemplate x:Key="ChildControlTemplate">
<control:ChildUSerControl DataContext="{Binding Path=ChildVM}/>
</ControlTemplate>
</UserControl.Resources>
然后您的父视图模型和子视图模型可以在C#中进行通信 - ParentViewModel将能够在实例化时与子进程通信。并且ParentViewModel可以在实例化时传递给子视图模型。