一、DataContext概述

Binding类的Source属性适合用于指定某个属性绑定的源对象,需要在每个控件上都显示指定绑定源、操作繁琐。
DataContext通常用于指定某一控件的默认数据上下文,会被该控件及其所有子控件继承和使用,如果几个控件需要绑定到同一个源,使用DataContext将更加简洁。
官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.windows.frameworkelement.datacontext?view=netframework-4.8
在这里插入图片描述

二、实例学习

建立如下类,作为数据源:

    public class Contact
    {
        public String City { get; set; }
        public String Phone { get; set; }
    }

    public class Teacher
    {
        public String Name { get; set; }
        public Contact Contact { get; set; }
        public ArrayList arrayList { get; set; }
    }

在XAML界面实例teacher对象为Window元素的数据上下文,并创建Text的绑定,代码如下:

    <Window.DataContext>
        <local:Teacher Name="张三">
            <local:Teacher.Contact>
                <local:Contact City="北京" Phone="010-12345567"/>
            </local:Teacher.Contact>

            <local:Teacher.Skill>
                <collections:ArrayList>
                    <system:String>C++</system:String>
                    <system:String>Java</system:String>
                </collections:ArrayList>
            </local:Teacher.Skill>
        </local:Teacher>
    </Window.DataContext>
    
    <Grid>
        <TextBox x:Name="TextBox" Text="{Binding Path=Name}" />
        <TextBox x:Name="TextBox1" Text="{Binding Name}" />
        <TextBox x:Name="TextBox2" Text="{Binding Contact.Phone}" />
        <TextBox x:Name="TextBox3" Text="{Binding Skill[0]}" />
    </Grid>

程序运行结果展示如下:

在这里插入图片描述

通常情况下,一个UI元素(如一个窗口、控件等)只能有一个 DataContext。
接下来新建窗口,演示Binding有多种写法代码如下:

  • 使用“.”代表访问源
  • 省略Path
  • 完全省略源,TextBox需修改Mode把TwoWay为OneWay
  • TextBlock控件的Mode默认为OneWay,可省略Mode

程序运行结果展示如下:

在这里插入图片描述

<Window.DataContext>
    <system:String>这是一个字符串</system:String>
</Window.DataContext>
<Grid>
    <TextBox x:Name="TextBox"  Text="{Binding Path=.}" HorizontalAlignment="Left" Margin="268,59,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="150" Height="32" FontSize="18"/>
    <TextBox x:Name="TextBox1" Text="{Binding .}" HorizontalAlignment="Left" Margin="268,120,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="150" Height="32" FontSize="18"/>
    <TextBox x:Name="TextBox2" Text="{Binding Mode=OneWay}" HorizontalAlignment="Left" Margin="268,185,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="150" Height="32" FontSize="18"/>
    <TextBlock x:Name="TextBlock" Text="{Binding}" HorizontalAlignment="Left" Margin="268,250,0,0" TextWrapping="Wrap"  VerticalAlignment="Top" Height="32" Width="150" FontSize="18"/>
</Grid>

在这里插入图片描述

总结

  • 一个UI元素(如一个窗口、控件等)只能有一个 DataContext。
  • Binding的四种写法
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐