一、如果没有显式设置上下文,那么数据上下文就是界面

例如下边代码,textBox1绑定textBlock2的Text属性的时候,数据上下文就是Grid或者Grid父容器的DataContext,上下文中能用到就是界面元素的属性。

二、可以在任何时候显式设置上下文,但是设置上下文以后绑定才会有效。

设置方法是ctlId.DataContext = xxx,例如grid1.DataContext = this;

三、可以在XAML中设置上下文

在XAML中设置DataContext,有三点要设置:1)引用namespace;2)设置Resources;

<Window x:Class="WpfAppDemo1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:c="clr-namespace:WpfAppDemo1"
        Title="MainWindow" Height="350" Width="525">
    <Grid Name="grid1">
        <Grid.Resources>
            <c:MyData x:Key="myData1" />
        </Grid.Resources>
        <Grid.DataContext>
            <Binding Source="{StaticResource myData1}" />
        </Grid.DataContext>
        <TextBox Height="23" HorizontalAlignment="Left" Margin="123,30,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Path=MyName}" />
    </Grid>
                    一、如果没有显式设置上下文,那么数据上下文就是界面  例如下边代码,textBox1绑定textBlock2的Text属性的时候,数据上下文就是Grid或者Grid父容器的DataContext,上下文中能用到就是界面元素的属性。二、可以在任何时候显式设置上下文,但是设置上下文以后绑定才会有效。  设置方法是ctlId.DataContext = xxx,例如grid1.DataC...
				
oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标。 OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。 OneWayToSource: 绑定会将数据从目标发送到源。 TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。 Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay. 上面的例子不设Mode时,默认的就是Default. 1.使用ObservableCollection 来声明这个数据集合,不能使用ListT<T>或者Dictionary<TKey,TValue>。Observable意味着MVVM中的View可以观察你的集合对象。当我们数据集合变化时,界面会发生相应的变化。 2.实现一个INotifyPropertyChanged的接口,这样我们的属性改变时,才会通知界面。 3.每一个WPF中的控件都有一个DataContext属性,集合控件会有一个ItemSource的属性,这些属性都可以让我们去绑定数据
前一段半心半意地学习了一下WPF,是从控件入手的,发现巨容易,甚至有些无趣。昨天面试,被问到了很多WPF的特性的东西,直接就傻了。于是乎,还是要去深刻的学习一下WPF。刚刚试了一下数据绑定,几次都没有成功,后来发现是DataContext搞得鬼。 我暂时有两点结论:   1、如果没有显式设置上下文,那么数据上下文就是界面;   例如下边代码,textBox1绑定textBlock2的Text...
关键的地方是,下面第3行,需要把当前的上下文传递到Content,生成绑定的ContentTemplate才能获取到绑定在UserControl的DataContext <Style TargetType="UserControl">
按照现在网上关于DataContext的普遍说法,WPF的UI是树状的,每个节点都是控件,所以每个节点都有DataContext属性,如果一个Binding找不到自己的Source那他就会沿着这个UI树一直往上找,直到找到和Path对应的那个属性,如果到最外层也没找到,那就没有数据源。 可我发现好像并不像是这样,下面用一个例子来说明吧。 新建一个类,为Human.cs using System; 1、当为ContextMenu指定DataContext时,因为ContextMenu属于弹出层,在VisualTree中与所在的设计视图已经分离,所以无法将DataContext绑定到任何父级元素,即使整个视图已指定了DataContext,也无法设置MenuItem的Command,也就是说,一下几种方式都是无效的,均不能触发菜单项的Command: <UserControl x:Class="....." x:Name="TestView">
DataContext属性是绑定的默认源,除非你具体指定了另外一个源,就像上一章里面我们使用了ElementName属性。它由FrameworkElement类定义,大部分UI控件包括WPF窗口都继承于此类。简单地说,它允许你指定一个绑定的基。 DateContext并没有默认源(刚开始的时候是NULL),但是它贯穿整个空间层次结构,你可以为窗口设置一个DataContext,然后在任意的子控件
WPF中,应用程序有两层:UI层和Data层。这里新建一个项目说明哪些是UI层,哪些是数据层。 UI层很明显,就是用户看到的界面。但是数据层并不是下图所示: 上图中是UI层view的后台代码。当然,你可以使用事件的方式把所有的业务逻辑代码写到这里,但是我们采用MVVM的时候业务逻辑是与这里解耦的,数据层是DataContext,此时并没有指定。 接下来我们新建个目录,然后添加个类文件: 然后指定VM类为DataContext: 此时我们才算为MVVM模式的wp
本文详细讲述了WPF绑定的用法,分享给大家供大家参考。具体用法分析如下: 1.WPF绑定使用的源属性必须是依赖项属性,这是因为依赖项属性具有内置的更改通知支持,元素绑定表达式使用了Xaml扩展标记,WPF绑定一个控件是使用Binding.ElementName,绑定非控件对象时使用Source,RelativeSource,DataContext属性(WPF特有,而非XAML),只能绑定对象的共有字段. 下边是部分Binding 属性名,完整列表参考 :http://msdn.microsoft.com/zh-cn/library/vstudio/ms750413.aspx ① Source:
笔记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
<Window x:Class="UserStore.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindo
```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 }; 这样,当用户修改文本框中的内容时,数据模型中的属性值也会随之改变,反之亦然。 C# 基础(二十八)C#的值类型(int/string/结构体集合为值类型)和引用类型(泛型集合为引用类型):自定义类泛型集合类型是引用类型。将自定义类改为自定义结构体,从而变成值类型,以便备份数据。 冷静的平头哥: 但是为何把这几种数据类型,直接获取gettypep判断是否值类型,数组和ist都是引用的,和里面是什么类型无关 MVVMLight(一)入门教程、WPF使用MVVMLitht教程。 不能再留遗憾了: 大佬的MVVMLight写的很详细,支持大佬表情包 (七)WPFC# 视频监控画面的传输:使用Aforge类库打开USB摄像头循环采集每一帧图像给Socket传输,并解决粘包、拆包问题 qq_45687903: videoPlayer.Source = bi;这一句报错了 (二)远程桌面连接,实现一个电脑远程控制另一个电脑:关闭防火墙、ping通IP、允许远程连接、输入用户名及密码 我爱AI: 用QQ远程吧,QQ有远程桌面的功能 (二)远程桌面连接,实现一个电脑远程控制另一个电脑:关闭防火墙、ping通IP、允许远程连接、输入用户名及密码 m0_69243526: 要想远程其他电脑,得先允许自己能被人远程? python自动化办公(三十二)pyinstaller.exe打包成exe程序,运行后ModuleNotFoundError或FileNoFounderError:no such file or ** python自动化办公(三十一)TKinter 先登录授权窗口,授权成功后进入master主窗口 python自动化办公(三十)TKinter master主窗口的Frame之间通信:实例化一个全局类,以便注册所有的Frame