WPF 文本框未从视图模型更新

本文关键字:视图 模型 更新 文本 WPF | 更新日期: 2023-09-27 18:37:25

我的视图模型中有一个属性,它在某些情况下返回一个常量。

其实现方式与此类似:

    class Tmp : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public String Text
        {
            get { return "testing"; }
            set
            {
                PropertyChanged(this,new PropertyChangedEventArgs("Text"));                }
        }
    }

所以属性 文本 alwasys 返回"测试"。

我将其绑定到一个文本框,例如:

  <TextBox Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

当应用程序启动时,文本框显示测试。

现在,当我在文本框中键入某些内容时,setter会被调用,它调用PropertyChanged。

在此之后,某些东西(可能是GUI)调用getter并得到值"测试"。

但是,文本框中的文本不会更改回测试。

所以我可以在文本框中输入"abc",即使模型只是存储"测试",文本框也会显示"abc"。

为什么文本框中的文本在每次击键时没有重置为"测试"?

WPF 文本框未从视图模型更新

为什么文本框应该再次获取文本?它只是将其写入您的源属性,它"知道"它必须相同,因为他正在告诉属性新值。否则,您将创建循环引用。您正在做的事情完全违背了酒店预期的准则和行为。

删除资源库,单向绑定,在常量更改时引发 text 属性,并使文本框只读。请记住,没有必要在 setter 中调用 Propertychanged。

若要使初始方法正常工作,需要突破"文本框更改属性,但不侦听传入的加急"状态

set
{
   sUIDispatcher.BeginInvoke((Action)(() => Raise("Name")));
}

我想补充一点,这是一个非常糟糕的主意,强烈建议您这样做。