2016-10-17 14 views
0

ParentView.xamlにParentUserControlという名前のユーザーコントロールがあるとします。コードの背後には、ParentViewModelのインスタンスが DataContextとして設定されています。 ParentUserControlにはChildUserControlがあります。 childUserControlの ビューモデルでParentViewModel(別名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

あなたは(下の例ではChildVMなど)ParentViewModelのChildViewModelプロパティを作成する場合は、配線することができそれは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'として渡されます。これは、その段階で2つのC#タイプ間の親子関係に過ぎないので、好きなようにアプローチすることができます.XAMLはこれまでのところ画像から外れています。 –

関連する問題