文本框的IsEnabled绑定只能生效一次,为什么?

3

我在绑定TextBox的IsEnabled属性时遇到了问题。我在论坛上看到了一些帖子,根据这些帖子,下面的代码应该能够工作(至少我原本是这么认为的)。

然而,当我运行应用程序时,对IsNumberEnabled属性的调用仅执行一次 - 就在相应视图加载之前。

有人能帮帮我吗?谢谢。

xaml:

<Textbox Text="{Binding Path=Number, Mode=TwoWay}" IsEnabled="{Binding Path=IsNumberEnabled}" ... />

模型视图:

public bool IsNumberEnabled
{
    get { return ... condition ....; }  }
1个回答

8

你的 ModelView 类需要正确实现 INotifyPropertyChanged 接口。

当你改变影响到你的 ...condition... 值时,你需要使用 "IsNumberEnabled" 作为属性名来触发 PropertyChanged。这将导致 WPF 再次获取和检查该值。

这通常意味着你会有其他需要级联并多次引发 PropertyChanged 事件的属性。例如,如果 IsNumberEnabled 依赖于另一个名为 Foo 的属性,则 Foo 的属性定义将如下所示:

public double Foo
{
    get { return foo; }
    set
    {
        if (foo != value)
        {
            foo = value;
            RaisePropertyChanged();  // Raise PropertyChanged event for "Foo"
            RaisePropertyChanged("IsNumberEnabled"); // Tell WPF to check this property too
        }
    }
}

就是这样。我确实引发了PropertyChanged事件,但是在错误的属性上。我应该在IsNumberEnabled上引发事件,而不是在Number上。谢谢。 - bdristan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接