簡體   English   中英

WPF文本框未從視圖模型更新

[英]Wpf text box not updated from view model

我的視圖模型中有一個屬性,該屬性在某些情況下會返回常量。

類似於此實現:

    class Tmp : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

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

因此屬性Text alwasys返回“測試”。

我將此綁定到一個文本框,如:

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

當應用程序啟動時,文本框正確性為測試。

現在,當我在文本框中鍵入內容時,將調用setter,它會調用PropertyChanged。

之后,某些東西(可能是GUI)調用getter並獲得值“ testing”。

但是,文本框中的文本不會更改回測試。

因此,我可以在文本框中鍵入“ abc”,並且即使模型只是存儲“ testing”,文本框也會顯示“ abc”。

為什么每次擊鍵時文本框中的文本都不會重置為“測試”?

為什么文本框應該再次獲取文本? 它只是將其寫到您的源屬性中,它“知道”它必須是相同的,因為他正在告訴屬性新值。 否則,您將創建循環引用。 您正在執行的操作完全違反了屬性所預期的准則和行為。

刪除設置器,使綁定成為一種方式,在更改常量時提高text屬性,並使文本框為只讀。 請記住,不必在設置器中調用Propertychanged。

為了使您的初始方法可行,您需要突破“文本框更改屬性,但不會監聽傳入的加薪”狀態

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

我想補充一點,這是一個非常糟糕的主意,並強烈建議您不要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM