zoukankan      html  css  js  c++  java
  • 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

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

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

  • 相关阅读:
    BCB 如何让Application收到SendMessage发送来的消息
    用BCB 画 Code128 B模式条码
    遍历SQL SERVER中所有存储过程和触发器
    EXCEL导入数据到SQL SERVER 2008
    TListView控件的ReadOnly属性的一个Bug
    Using Microsoft Visual C++ DLLs with C++Builder
    行列转换的例子
    WCF 使用Stream模式进行文件上传 --节选自Packt.Net.Framework.4.5.Expert.Programming.Cookbook
    WCF Endpoint分类
    SQL Error: 1064, SQLState: 42000
  • 原文地址:https://www.cnblogs.com/shzt/p/15811082.html
Copyright © 2011-2022 走看看