WPF,MVVM多层嵌套VM的传值
目前我的一个窗体结构如下:
A窗体(Window)包括B用户控件(UserControl)
目前A的VM——ViewModelA 已经能和A窗体的DataContext数据上下文相绑定。
B用户控件里有dataTemplate绑定到数据中。
那么如何给B控件赋值呢?
两种方式:
①方式一
:绑定到 A Window 的 ViewModel 的一部分。
即:直接在AViewModel类中添加上所有B用户控件需要的依赖属性
比较简单
<Window x:Class="YourNamespace.A" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:YourNamespace" Title="A Window"> <Grid> <local:B DataContext="{Binding .}" /> </Grid> </Window>
//实现方式一
注意:<local:B DataContext="{Binding .}" /> 和 <local:B DataContext="{Binding }" /> 和 <local:B DataContext="{Binding .}" /> 和 <local:B DataContext="{Binding .}" />
两种方式一样,都是绑定到自身的DataContext。这种方式说明B UserControl 和 A Window 公用一个数据上下文DataContext
②方式二
添加一个BViewModel(即用户控件B自身的数据上下文)
可以通过依赖注入等方式
public class AViewModel { public BViewModel BViewModel { get; set; } public AViewModel() { BViewModel = new BViewModel(); } } <Window x:Class="YourNamespace.A" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:YourNamespace" Title="A Window"> <Grid> <local:B DataContext="{Binding BViewModel}" /> </Grid> </Window>

浙公网安备 33010602011771号