DataContext属性是 绑定 的默认源,除非你具体指定了另外一个源,就像上一章里面我们使用了ElementName属性。它由FrameworkElement类定义,大部分UI控件包括WPF窗口都继承于此类。简单地说,它允许你指定一个 绑定 的基。

DateContext并没有默认源(刚开始的时候是NULL),但是它贯穿整个空间层次结构,你可以为窗口设置一个DataContext,然后在任意的子控件里面使用它。让我们用代码来举例说明:

<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="DataContextSample" Height="130" Width="280">
        <StackPanel Margin="15">
                <WrapPanel>
                        <TextBlock Text="Window title:  " />
                        <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />
                </WrapPanel>
                <WrapPanel Margin="0,10,0,0">
                        <TextBlock Text="Window dimensions: " />
                        <TextBox Text="{Binding Width}" Width="50" />
                        <TextBlock Text=" x " />
                        <TextBox Text="{Binding Height}" Width="50" />
                </WrapPanel>
        </StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.DataBinding
        public partial class DataContextSample : Window
                public DataContextSample()
                        InitializeComponent();
                        this.DataContext = this;

后台代码只添加了一行有意思的代码:在标准InitalizeComponent()调用之后,我们将“this”赋值给DataContext,这将告诉窗口我们系统窗口本身作为数据上下文。

在XAML中,我们绑定了窗口的一些属性值,如Title,Width和Height。由于窗口有一个DataContext,它可以传递给子控件,我们不再需要给每一个绑定定义一个源。如果这些属性是全局变量,直接使用它们的值就行。

运行上面的代码,然后改变窗口大小,你会发现高和宽的值会立马改变。如果编写一个不同的标题在第一个文本框里,你会发现标题并没有立即被改变。相反地,你必须将光标移动到其他控件上改变才会生效。为什么会这样?这是下一章的主题。(注:我在VS2012里面试这个例子,标题是立即实时改变的)

使用DataContext属性就好像设置了所有绑定的基础,能够贯穿整个控件层次。这样就节省了手动为每一个绑定定义源,一旦你真正开始使用数据绑定,肯定会感激如此节省的时间。

但是,这并不意味着你必须在一个窗口里面为所有控件使用同样的DataContext。由于每一个控件都有其自己的DataContext属性,你可以很容易的打破继承链,用新值来重写DataContext。这就允许你在窗口里使用一个全局DataContext,然后在像panel这样的地方使用本地具体的DataContext,以一种独立的格式或者像上面的列出的那样。

DataContext属性是绑定的默认源,除非你具体指定了另外一个源,就像上一章里面我们使用了ElementName属性。它由FrameworkElement类定义,大部分UI控件包括WPF窗口都继承于此类。简单地说,它允许你指定一个绑定的基。DateContext并没有默认源(刚开始的时候是NULL),但是它贯穿整个空间层次结构,你可以为窗口设置一个DataContext,然后在任意的子控件 笔记2:WPFCommand命令使用1、列表按钮绑定事件使用2、Command命令绑定传递指定控件对象 1、列表按钮绑定事件使用 Command=”{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListBox}, Path=DataContext.But_click}” CommandParameter=”{Binding Name,Mode=TwoWay}” 绑定按钮点击Command,找到对象的父级容器,类型指定为ListBox,触发事件为DataContext
本文详细讲述了WPF绑定的用法,分享给大家供大家参考。具体用法分析如下: 1.WPF绑定使用的源属性必须是依赖项属性,这是因为依赖项属性具有内置的更改通知支持,元素绑定表达式使用了Xaml扩展标记,WPF绑定一个控件是使用Binding.ElementName,绑定非控件对象时使用Source,RelativeSource,DataContext属性(WPF特有,而非XAML),只能绑定对象的共有字段. 下边是部分Binding 属性名,完整列表参考 :http://msdn.microsoft.com/zh-cn/library/vstudio/ms750413.aspx ① Source:
1、写viewModel的基类 NotificationObject: 2、数据属性和命令属性,实现 命令属性的基类: 3、3个数据属性和2个命令属性(add和save),实现viewModel 4、在xaml中,绑定: 5、添加DataContext: 获取或设置元素参与数据绑定时的数据上下文。数据上下文是一种概念,允许元素从父元素继承有关用于绑定的数据源以及绑定的其他特征(如路径)的信息。此依赖属性继承属性值。如果有子元素没有通过本地值或样式建立的DataContext的其他值,则属性系统会将该值设置为已分配此值的最近父元素的DataContext值。 在 XAML 中,DataContext通常设置为Binding声明。可以使用属性元素语法或特性语法。还可以使用代码设置DataConte...
1)在FrameworkElement类下有两个重要的属性。利用这两个属性,可以实现UI数据直接与后台的类进行绑定2)前端UI界面属性值等动态与后台绑定的方式有多种,此处列出后台设置DataContext以及前端设置DataContext的两种方式,以及数据双向绑定的最佳实践纯前端的方式好处在于,编译一下,就可以在设计阶段看到效果。 1)先定义好我们的类 2)在前端按照步骤引入 后台设置DataContext 在设计阶段是看不到效果的,但是灵活性更高,属性值不用写死 1)定义一个类 2)在当前窗口加载时,进
数据绑定中使用DataContext 数据上下文,DataContext 属性是绑定的默认源,除非你特别声明另一个源。DataContext 属性没有默认源(从一开始就是 null),但是由于 DataContext 是通过控件层次结构向下继承的,因此可以为 Window 本身设置一个 DataContext,然后在所有子控件中使用它。UI XAML 代码: 后台绑定: 这个例子的代码隐藏只添加了一行有趣的代码:在标准的 InitalizeComponent() 调用之后,我们将“this”引用分配给 Da
UI元素树的每一个结点都有DataContext,当Binding只知道自己的path ,而不知道source时,会沿着 UI元素树一路的向树根部找过去,路过节点,比较结点的DataContext是否具有Path所指定的属性,有的话,把对应的节点对象作为自己的source C# class
前一段半心半意地学习了一下WPF,是从控件入手的,发现巨容易,甚至有些无趣。昨天面试,被问到了很多WPF的特性的东西,直接就傻了。于是乎,还是要去深刻的学习一下WPF。刚刚试了一下数据绑定,几次都没有成功,后来发现是DataContext搞得鬼。 我暂时有两点结论:   1、如果没有显式设置上下文,那么数据上下文就是界面;   例如下边代码,textBox1绑定textBlock2的Text...
WPF中,应用程序有两层:UI层和Data层。这里新建一个项目说明哪些是UI层,哪些是数据层。 UI层很明显,就是用户看到的界面。但是数据层并不是下图所示: 上图中是UI层view的后台代码。当然,你可以使用事件的方式把所有的业务逻辑代码写到这里,但是我们采用MVVM的时候业务逻辑是与这里解耦的,数据层是DataContext,此时并没有指定。 接下来我们新建个目录,然后添加个类文件: 然后指定VM类为DataContext: 此时我们才算为MVVM模式的wp ```xml <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <TextBox Text="{Binding Name}" /> <TextBox Text="{Binding Age}" /> </Grid> </Window> 3. 在代码中创建数据模型实例,并将其赋值给控件的DataContext属性,例如: ```csharp public partial class MainWindow : Window public MainWindow() InitializeComponent(); DataContext = new Person { Name = "John", Age = 30 }; 这样,当用户修改文本框中的内容时,数据模型中的属性值也会随之改变,反之亦然。