一個TextBlock具有以下綁定:Silverlight的結合問題嵌套ViewModel類
<TextBlock Text="{Binding Path=Sum, FallbackValue=9999}"></TextBlock>
的DataContext在SL應用程序的構造函數設置
ViewModelClass viewModelObject=new ViewModelClass();
public Calculator()
{ ....
DataContext=viewModelObject;
}
現在IM在調查模式,所以我刪除了所有的DataContext OCCURENCES從文本,所以這是目前唯一的整個項目。
我的ViewModel類實現INotifyPropertyChanged接口和屬性Sum存在。
如果我將public int Sum
更改爲public int SumDOESNTEXIST
並啓動SL應用程序,我收到一個錯誤,指出找不到屬性Sum,因此綁定在某種程度上起作用。
NotifyPropertyChanged("Sum");
在需要的地方
但是正如我在VM我的基本代碼發現了以下if
結果爲假觸發,所以沒有人訂閱了事件。
protected void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
結果Sum屬性被更新,但TextBlock沒有指出。
我在做什麼錯?
編輯:我使用的單向綁定(但雙向不會改變任何東西僅供參考),因爲我需要更新的文本塊屬性僅當源屬性發生變化(單向綁定的定義)
至於DataContext的,我在這裏增加了一個相當直接的檢查:
internal void sum_Changed(object sender, TextChangedEventArgs e)
{
if(mySadLabel.DataContext== viewModelObject)
MessageBox.Show("correct");
NotifyPropertyChanged("Sum");
}
的MessageBox顯示..
如果DataContext設置INotifyPropertyChanged接口實現我相信有應該是PropertyChanged事件的訂閱者?在我的情況下,他們缺席。
你是正確的,你有正確的模式。 – 2011-05-27 02:41:07
鼓舞人心的,但不工作!事件爲空,沒有人有興趣更新它可能會觸發.. – 2011-05-27 02:42:44
您是否使用特定的mvvm框架? – 2011-05-27 02:43:16