当前位置:  开发笔记 > 编程语言 > 正文

WPF DependencyProperties

如何解决《WPFDependencyProperties》经验,为你挑选了1个好方法。

我刚刚意识到我一直在强制绑定/依赖属性,而不是从根本上理解这个概念.

继承人属性:

public string Problem
{
    get { return (string)GetValue(ProblemProperty); }
    set { SetValue(ProblemProperty, value); }
}

public static readonly DependencyProperty ProblemProperty =
    DependencyProperty.Register(
    "Problem",
    typeof(string),
    typeof(TextBox));

XAML如此:


我手动将Problem属性设置为对象的构造函数中的值,但它不会相应地更新TextBlock...有任何想法吗?我已经尝试过Mode="OneWay"并且Mode="TwoWay"仍然无法正常工作.

我以为这应该自动运行?或者我从根本上弄错了什么?

谢谢



1> Micah..:

你遇到的问题肯定与你的DataContext有关.{Binding}扩展需要知道您绑定的属性所在的位置.它查看的默认位置是元素DataContext,默认情况下,它始终设置为其父元素的DataContext.如果将DataContext从逻辑树向上移动到父窗口,则DataContext将为null(因为窗口的DataContext为null).因此,你的文本块上的{Binding}正在说"将我的Text属性绑定到我的DataContext的问题属性...这是null.

有几种方法可以解决这个问题.一个就是像Jobi提到的那样做,并将绑定的Element属性设置为指向DependencyProperty定义的Window,如下所示:


另一种选择是将Window的DataContext设置为指向自身.这样,它内容中包含的所有元素都将具有窗口的DataContext.


现在,只要你需要绑定到窗口中定义的属性(比如你的问题依赖属性),你就可以这样做:


推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有