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"。
为什么文本框中的文本在每次击键时没有重置为"测试"?
为什么文本框应该再次获取文本?它只是将其写入您的源属性,它"知道"它必须相同,因为他正在告诉属性新值。否则,您将创建循环引用。您正在做的事情完全违背了酒店预期的准则和行为。
删除资源库,单向绑定,在常量更改时引发 text 属性,并使文本框只读。请记住,没有必要在 setter 中调用 Propertychanged。
若要使初始方法正常工作,需要突破"文本框更改属性,但不侦听传入的加急"状态
set
{
sUIDispatcher.BeginInvoke((Action)(() => Raise("Name")));
}
我想补充一点,这是一个非常糟糕的主意,强烈建议您这样做。