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>

 

posted @ 2024-12-19 15:27  邪恶心机炜  阅读(174)  评论(0)    收藏  举报