2011-06-25 54 views
0

在MVVM中使用SL4。Dataform編輯模式&導航離開頁面。 MVVM Silverlight

當我在編輯模式下有一個數據表單,並導航到另一個頁面時,我收到了與嘗試RaisePropertyChanged(對象引用未設置爲對象實例)相關的錯誤。

我發現this並實施它,試圖解決這個問題。我的Dataform絕對是我的CancelEdit函數(我的IEditableObject實現的一部分,位於我的所有模型的基類中)。

我也用合適的值初始化了所有可以爲空的聲明/支持者變量(例如,私有小數_GeneralOverhead = 0.0M),所以我真的很困惑什麼沒有被設置爲對象的實例。

1)拉起數據形式&點擊「編輯項目」按鈕
2)中的一個字段編輯的值
3)導航至另一頁

在:下面的步驟之後發生錯誤這一點,我在我的EditableModelBase(實現IEditableObject)中調用取消編輯。從這裏,這是HTE代碼:

4)內部EditableModelBase:

public void CancelEdit() 
    { 
     foreach (var info in CurrentModel.GetType().GetProperties()) 
     { 
      if (!info.CanRead || !info.CanWrite) continue; 
      // if (info.Name == "StatusCodeString" || info.Name == "StatusCodeImage" || info.Name == "StatusCodeColor") continue; 
      var oldValue = info.GetValue(Cache, null); 
      CurrentModel.GetType().GetProperty(info.Name).SetValue(CurrentModel, oldValue, null); 
     } 
    } 

在第一次迭代通過我的foreach循環,當它擊中.SetValue(CurrentModel)線,它調用了我的模型。現在,我的模型RaisePropertyChanged中的每個道具,因爲否則我的數據表單不會識別它已被更改(從而允許「取消」按鈕來啓用它自己)。當RaisingPropertyChanged被觸發,它調用這個代碼塊:

protected virtual void RaisePropertyChanged(string propertyName) 
    { 
     VerifyPropertyName(propertyName); 

     var handler = PropertyChanged; 

     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

我試着扔在支票上處理&「新PropertyChangedEventArgs」,他們都被實例化。我能想到的唯一事實是我的'this'對象被設置爲(在這種情況下)我的Models.Transactions模型。即使這是真的,我不知道如何解決它。 任何想法?

回答

0

從我看到你的帖子我會認爲你正在loking的一個屬性是不存在的。爲了儘量減少風險,並可能解決問題,我建議以下實施:

public void CancelEdit() { 
    foreach (var info in CurrentModel.GetType().GetProperties()) { 
     if (!info.CanRead || !info.CanWrite) continue; 
     // if (info.Name == "StatusCodeString" || info.Name == "StatusCodeImage" || info.Name == "StatusCodeColor") continue; 
     var oldValue = info.GetValue(Cache, null); 
     var property = CurrentModel.GetType().GetProperty(info.Name); 
     if (property != null) 
      property.SetValue(CurrentModel, oldValue, null); 
    } 
} 
+0

對不起,我正在露營!這仍然擊中我的RaisePropertyChanged&引發同樣的錯誤。錯誤發生在'處理程序(這是新的PropertycChangedEventArgs(propertyName))'行,沒有我能看到的是null ... :( –