gpt4 book ai didi

WPF 依赖属性

转载 作者:行者123 更新时间:2023-12-04 13:25:15 25 4
gpt4 key购买 nike

我刚刚意识到我一直在强制绑定(bind)/依赖属性,并没有真正从根本上理解这个概念。

继承人的依赖属性:

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 是这样的:
<TextBlock Text="{Binding Path=Problem}"/>

我正在手动设置 Problem属性为对象的构造函数中的一个值,但它不更新 TextBlock因此 。 . .有任何想法吗?我试过 Mode="OneWay"Mode="TwoWay"在绑定(bind)上,它仍然不起作用。

我以为这应该自动工作?还是我从根本上搞错了什么?

谢谢

最佳答案

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

有几种方法可以解决这个问题。一种方法是像 Jobi 提到的那样做,并将绑定(bind)的 Element 属性设置为指向 DependencyProperty 定义如下的窗口:

<TextBlock Text="{Binding Path=Problem,ElementName=_window}" />

另一种选择是将 Window 的 DataContext 设置为指向自身。这样,其内容中包含的所有元素都将具有窗口的 DataContext。
<Window ....
DataContext="{Binding RelativeSource={RelativeSource Self}}">

现在,只要您需要绑定(bind)到窗口中定义的属性(例如您的 Problem 依赖项属性),您就可以这样做:
<TextBlock Text="{Binding Problem}" />

关于WPF 依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/317973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com