在XAML中绑定依赖属性失败,但在代码隐藏中却能正常工作。
TestProperty
依赖属性的声明缺少nameof()
操作符,导致属性名称与XAML绑定路径不匹配。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中文网其他相关文章!