目前我的一个窗体结构如下:
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>