WPF中DataContext作用

最近在学习WPF绑定的时候不明白DataContext的作用,经常导致数据绑定不上问题。

1,WPF应用程序有UI层和数据层,通过DataContext连接。

     

 

 需要注意的是View类的C#代码,并不是数据层。

2,未设置DataContext的UI对象将从其父对象继承其数据层

<!-- 注意此时我已经在初始化代码中设置DataContext 为 ClassA,DataContext = new ClassA  -->
<Window x:Name="MyWindow"> 
    <!-- DataContext 没有被指定,所以继承自父类的 DataContext,也就是 ClassA -->
    <StackPanel> 
        <!-- DataContext 继承自父类,也就是 ClassA, 所以这里会显示 ClassA.Name -->
        <Label Content="{Binding Name}" />
         <!-- DataContext 仍然是ClassA, 但是我们通过binding设置为ClassA.ClassB-->
        <StackPanel DataContext="{Binding ClassB}"> 
            <!-- DataContext 继承自父类,也就是ClassB,所以这里会显示 ClassB.Name -->
            <Label Content="{Binding Name}" />
            <!-- DataContext i仍然是 ClassB, 但是我们binding 到了Window's DataContext.Name, 也就是 ClassA.Name -->
            <Label Content="{Binding 
                       ElementName=MyWindow, 
                       Path=DataContext.Name}" /> 
        </StackPanel> 
        <!-- We've left the StackPanel with its DataContext 
             bound to ClassB, so this Label's DataContext 
             is ClassA (inherited from parent StackPanel), 
             and we are binding to ClassA.ClassB.Name -->
        <Label Content="{Binding ClassB.Name}" />
    </StackPanel>
</Window>

3,为UI层指定DataContext的两种方式。

一种是在View后台中:

var cont = new MainViewModle();
DataContext = cont;

一种是在XAML中:

<!--需要指定名称空间vm:
xmlns:vm="clr-namespace:SimpleCommandDemoApp.ViewModels"-->
<UserControl.Resources>
    <vm:CalculatorViewModel x:Key="calculatorVM" />
</UserControl.Resources>

 

以上内容源自以下资料

https://www.cnblogs.com/feipeng8848/p/11637108.html

--------------------------------------------

本人所写博客仅为记录个人在学习过程中遇到的问题,如有错误造成误导,还请见谅。

posted @ 2022-01-16 20:11  低音弦  阅读(675)  评论(0编辑  收藏  举报