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

Osa*_*ved 1 c# wpf binding

我的视图模型中有一个属性,它在某些条件下返回一个常量.

实现与此类似:

    class Tmp : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public String Text
        {
            get { return "testing"; }
            set
            {
                PropertyChanged(this,new PropertyChangedEventArgs("Text"));                }
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以属性Text alwasys返回"testing".

我把它绑定到一个文本框,如:

  <TextBox Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时,文本框correclty说测试.

现在,当我在文本框中输入内容时,调用setter,调用PropertyChanged.

在此之后(可能是GUI)调用getter并获取值"testing".

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

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

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

dow*_*for 6

为什么文本框会再次获取文本?它只是将它写入你的源属性它"知道"它必须是相同的,因为他正在告诉属性新值.否则你会创建循环引用.你正在做的是完全违反财产预期的准则和行为.

删除setter,使绑定成为一种方式,在更改常量时引发text属性,并使文本框只读.请记住,没有必要在setter中调用Propertychanged.

要使您的初始方法有效,您需要打破"文本框更改属性但不会侦听传入加注"状态

set
{
   sUIDispatcher.BeginInvoke((Action)(() => Raise("Name")));
}
Run Code Online (Sandbox Code Playgroud)

我想补充一点,这是一个非常糟糕的主意,强烈反对你这样做.