我的视图模型中有一个属性,它在某些条件下返回一个常量.
实现与此类似:
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",即使模型只是存储"测试".
为什么文本框中的文本不会在每次击键时重置为"测试"?
为什么文本框会再次获取文本?它只是将它写入你的源属性它"知道"它必须是相同的,因为他正在告诉属性新值.否则你会创建循环引用.你正在做的是完全违反财产预期的准则和行为.
删除setter,使绑定成为一种方式,在更改常量时引发text属性,并使文本框只读.请记住,没有必要在setter中调用Propertychanged.
要使您的初始方法有效,您需要打破"文本框更改属性但不会侦听传入加注"状态
set
{
sUIDispatcher.BeginInvoke((Action)(() => Raise("Name")));
}
Run Code Online (Sandbox Code Playgroud)
我想补充一点,这是一个非常糟糕的主意,强烈反对你这样做.
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |