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

时间:2012-06-15 16:12:53

标签: c# wpf binding

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

实现与此类似:

    class Tmp : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public String Text
        {
            get { return "testing"; }
            set
            {
                PropertyChanged(this,new PropertyChangedEventArgs("Text"));                }
        }
    }

所以属性Text alwasys返回“testing”。

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

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

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

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

在此之后(可能是GUI)调用getter并获取值“testing”。

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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