首页 > 后端开发 > C++ > 为什么我的 XAML 绑定到依赖属性失败,但代码隐藏却有效?

为什么我的 XAML 绑定到依赖属性失败,但代码隐藏却有效?

DDD
发布: 2025-01-09 20:52:43
原创
539 人浏览过

Why Is My XAML Binding to a Dependency Property Failing, But Code-Behind Works?

XAML绑定依赖属性失败

问题

在XAML中绑定依赖属性失败,但在代码隐藏中却能正常工作。

原因

  1. 依赖属性声明错误: TestProperty依赖属性的声明缺少nameof()操作符,导致属性名称与XAML绑定路径不匹配。
  2. XAML中的绑定源错误: XAML绑定中未显式设置绑定源(DataContext),因此默认为UserControl自身,而不是从父窗口继承的DataContext。
  3. 在构造函数中设置DataContext: 在UserControl的构造函数中设置DataContext属性会阻止继承父级的DataContext,导致绑定源无效。

解决方法

1. 正确声明依赖属性

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

2. 在XAML中设置Bindings.RelativeSource

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

3. 删除构造函数中的DataContext赋值

从UserControl构造函数中删除DataContext = this;这行代码。

附加说明

在代码隐藏中显式设置绑定源:

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext,
    ...
});</code>
登录后复制

在XAML中隐式设置绑定源:

<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>
登录后复制

在XAML中,隐式绑定源默认为当前DataContext,应由父窗口正确设置。在UserControl的构造函数中设置DataContext会覆盖继承的DataContext,导致绑定失败。 通过在代码隐藏绑定中设置Source = DataContext,绑定源显式设置为继承的DataContext,确保绑定有效。

以上是为什么我的 XAML 绑定到依赖属性失败,但代码隐藏却有效?的详细内容。更多信息请关注PHP中文网其他相关文章!

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