2010-07-20 56 views
0

我正在wpf - mvvm模型中工作。可以將值賦給屬性更改事件上的屬性嗎?

我有一個文本框,其中包含「marketName」。在xaml中,我將屬性 - 「newmarketname」(在我的viewmodel中定義)綁定到此文本框。一旦用戶在該文本框中輸入新的市場名稱,就會調用「newmarketname」的「set」方法。

在「newmarketname」的設置方法中,我調用PropertyChanged事件。

而屬性更改處理程序將調用fucntion,其中我檢查市場名稱是否已經存在;如果「是」,我會將string.Empty分配給屬性「newmarketname」。 因此,「newmarketname」的設置方法會再次被調用,然後是PropertyChanged事件。

但問題是:即使「newmarketname」的價值得到改變空,它是沒有得到體現在UI。

這是什麼問題?

+0

方面的變化,如果你發佈你的代碼,這可能有助於 – 2010-07-20 13:09:01

+0

這是PropertyChanged事件之一與INotifyPropertyChanged有關嗎?如果是,那麼爲什麼你從那裏調用函數(以檢查現有的市場名稱),爲什麼不在setter本身中執行該檢查,然後更新該變量並調用PropertyChanged事件? – akjoshi 2010-07-20 13:17:25

+0

Bcoz ...在這個視圖模型中的所有屬性...我打電話給一個方法...在哪裏,取決於屬性,我會做些什麼... – Relativity 2010-07-20 13:23:51

回答

1

WPF將忽略,而它的值設置引發的PropertyChanged事件。一種解決方法是使用Converter(甚至只返回原始值)並將UpdateSourceTrigger設置爲LostFocus。另一個是將IsAsync設置爲True。

這已在.NET 4.0中修復。有關更多信息,請參見本博客條目:http://karlshifflett.wordpress.com/2009/05/27/wpf-4-0-data-binding-change-great-feature/

+0

你可以告訴我如何使用這個轉換器 – Relativity 2010-07-20 13:36:38

0

您是否在更改底層變量而不是屬性?這是我總是這樣做的(錯誤)。

+0

不......我改變財產本身...和「屬性更改」事件獲取調用... 是的......事情是,在屬性改變了一個屬性的事件...你再次改變它...這是第一個來自UI ...然後從代碼水平 – Relativity 2010-07-20 13:13:25

0

也許你可以設置您的結合模式爲雙向,這樣一來就會反映在用戶界面和代碼背後

<TextBlock Text="{Binding newmarketname, Mode=TwoWay}" />