【发布时间】:2012-06-15 16:12:53
【问题描述】:
我的视图模型中有一个属性,它在某些条件下返回一个常量。
实现方式与此类似:
class Tmp : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public String Text
{
get { return "testing"; }
set
{
PropertyChanged(this,new PropertyChangedEventArgs("Text")); }
}
}
所以属性 Text 总是返回“测试”。
我将它绑定到一个文本框,例如:
<TextBox Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
当应用程序启动时,文本框 correclty 显示正在测试。
现在,当我在文本框中键入内容时,将调用 setter,它调用 PropertyChanged。
在此之后(可能是 GUI)调用 getter 并获取值“testing”。
但是文本框中的文本并没有变回测试。
所以我可以在文本框中输入“abc”,即使模型只是存储“测试”,文本框也会显示“abc”。
为什么每次击键时文本框中的文本没有重置为“测试”?
【问题讨论】:
-
IIRC 你不必通过 propertychanged 事件而不是空字符串来传递属性名称吗?
-
不是真正的 String.Empty 或 "" 表示“嘿,我的所有属性都无效,请全部获取”在这种情况下,它的意思是“也获取文本”......它太多了,但工作.
-
Empty sting 应该强制所有内容都得到更新。我原本的属性名 .. 改为 "" 以防万一
-
更改了代码但仍然得到相同的行为
-
我刚试过这个(.NET 4.5),它按你的预期工作