2016-10-17 64 views
0

假设在ParentView.xaml中有一个名为ParentUserControl的用户控件。在后面的代码中,我设置了一个ParentViewModel的实例,因为它是 DataContext。在ParentUserControl中有一个ChildUserControl。我如何在childUserControl的 视图模型中访问ParentViewModel a ParentUserControl的DataContext,并且以相反的方式访问parentViewModel中的childviewmodel。访问父USerControl ViewModel或反之亦然

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

如果您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可以传递给子视图模型。

+0

如何将parentviewmodel传递给childviewmodel实例?在这种情况下,我会获得parentviewmodel的活动实例吗? – lukai

+0

ChildViewModel是在ParentViewModel内部创建的,所以ParentViewModel的实例可以只传递为'this'。它只是这个阶段的两个c#类型之间的父子关系,所以你可以按照你喜欢的方式来处理 - 到那时XAML已经超出了图片的范围。 –

相关问题