首页 > 后端开发 > C++ > 为什么我的 XAML 绑定不更新我的依赖属性?

为什么我的 XAML 绑定不更新我的依赖属性?

Mary-Kate Olsen
发布: 2025-01-09 21:05:42
原创
748 人浏览过

Why Isn't My XAML Binding Updating My Dependency Property?

使用依赖项属性排查 WPF XAML 绑定问题

本文解决了一个常见的 WPF 问题:当依赖项属性更改时,XAML 数据绑定无法更新 UI,即使代码隐藏绑定工作正常。

场景:

WPF 应用程序在 XAML 中使用依赖属性,但当绑定属性的值更改时,绑定不会更新 UI。 然而,代码隐藏绑定可以按预期运行。

依赖属性定义(不正确):

<code class="language-csharp">public static readonly DependencyProperty TestProperty = DependencyProperty.Register("Test", typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));</code>
登录后复制

XAML 绑定(问题):

<code class="language-xaml"><TextBlock Text="{Binding Test}"></TextBlock></code>
登录后复制

解决方案:

核心问题在于依赖属性注册和XAML绑定。 这是正确的方法:

更正的依赖属性定义:

<code class="language-csharp">public static readonly DependencyProperty TestProperty =
    DependencyProperty.Register(
        nameof(Test), // Use nameof for better maintainability
        typeof(string),
        typeof(MyControl),
        new PropertyMetadata("DEFAULT"));</code>
登录后复制

更正的 XAML 绑定:

<code class="language-xaml"><TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>
登录后复制

此更正的 XAML 显式设置 RelativeSource 以查找 UserControl 作为绑定源。

重要注意事项:

  • 避免在 UserControl 构造函数中设置 DataContext:DataContext 的构造函数中设置 UserControl 可防止继承父级的 DataContext,这通常会导致绑定失败。

  • 替代方案:在代码隐藏中显式绑定: 如果使用 RelativeSource 不切实际,请在代码隐藏中显式设置绑定:

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext, // Use the MainWindow's DataContext
    Path = new PropertyPath("MyText"),
    Mode = BindingMode.TwoWay
});</code>
登录后复制

通过执行这些步骤,您可以确保您的 XAML 绑定正确更新您的依赖项属性,从而生成功能齐全且响应迅速的 WPF 应用程序。

以上是为什么我的 XAML 绑定不更新我的依赖属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板