WPF DataContext 使用

数据绑定中使用DataContext 数据上下文,DataContext 属性是绑定的默认源,除非你特别声明另一个源。DataContext 属性没有默认源(从一开始就是 null),但是由于 DataContext 是通过控件层次结构向下继承的,因此可以为 Window 本身设置一个 DataContext,然后在所有子控件中使用它。

UI XAML 代码:

<Window x:Class="WpfApp1.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WpfApp1"

        mc:Ignorable="d"

        Title="测试 DataContext" Height="450" Width="800">

    <Grid>

        <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>

    </Grid>

</Window>

后台绑定:

public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            this.DataContext = this;

        }

    }

这个例子的代码隐藏只添加了一行有趣的代码:在标准的 InitalizeComponent() 调用之后,我们将“this”引用分配给 DataContext,它只是告诉窗口我们希望自己成为数据上下文。在 XAML 中,我们使用这个事实来绑定到几个 Window 属性,包括 Title、Width 和 Height。由于窗口有一个 DataContext,它被传递给子控件,我们不必在每个绑定上定义一个源 - 我们只需使用这些值,就好像它们是全局可用的一样。

尝试运行示例并调整窗口大小 - 您将看到尺寸更改立即反映在文本框中。您也可以尝试在第一个文本框中编写不同的标题,但您可能会惊讶地发现此更改并未立即反映。相反,您必须在应用更改之前将焦点移动到另一个控件。

使用 DataContext 属性就像通过控件的层次结构向下设置所有绑定的基础。这为您节省了为每个绑定手动定义源的麻烦,并且一旦您真正开始使用数据绑定,您一定会喜欢节省的时间和输入。

但是,这并不意味着您必须对 Window 中的所有控件使用相同的 DataContext。由于每个控件都有自己的 DataContext 属性,因此您可以轻松打破继承链并使用新值覆盖 DataContext。这允许您做一些事情,例如在窗口上拥有一个全局 DataContext,然后在一个面板上拥有一个单独的表单或类似的东西上一个更本地和特定的 DataContext。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值