最近在学习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
--------------------------------------------
本人所写博客仅为记录个人在学习过程中遇到的问题,如有错误造成误导,还请见谅。