访问父用户控制视图模型,反之亦然
本文关键字:模型 反之亦然 视图 控制 用户 访问 | 更新日期: 2023-09-27 18:13:19
假设在ParentView.xaml中有一个名为ParentUserControl的用户控件。在后面的代码我已经设置了ParentViewModel的实例,因为它的DataContext。在ParentUserControl中有一个ChildUserControl。我怎么能访问ParentViewModel aka ParentUserControl的DataContext在childUserControl的查看模型,也在相反的方式我如何访问childviewmodel在parentViewModel。
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;
}
如果你让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可以在实例化时传递给子视图模型。