2011-06-25 9 views
0

MVVMでSL4を使用する。Dataform編集モード&ページから移動します。 MVVM Silverlight

編集モードでデータフォームがあり、別のページに移動したとき、RaisePropertyChanged(オブジェクト参照がオブジェクトのインスタンスに設定されていない)に関連するエラーが発生します。

私はthisを見つけ、問題を解決するためにそれを実装しました。私のデータフォームは、私のCancelEdit関数(私のすべてのモデルのベースクラスにある私のIEditableObject実装の一部)に当たっています。

私は、オブジェクトのインスタンスに設定されていないものに本当に困惑しているので、nullable宣言/バッカー変数をすべて適切な値(例:private decimal _GeneralOverhead = 0.0M)で初期化しました。エラーは、次の手順の後に発生します。

1)データ形式&クリック「編集項目」ボタン
2を引き上げ)フィールド
3の1の値を編集します)で、別のページへ

をナビゲートこの時点で、私はEditableModelBase(IEditableObjectを実装しています)でcancel editを呼び出します。そのは.SetValue(CurrentModel)ラインを打つ、それは私のモデルを呼び出したときに、私のforeachループを通る最初の反復で

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); 
     } 
    } 

4)EditableModelBase内側:ここからは、これは敬遠しがちコードです。さて、私のモデル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

私があなたの投稿から見るものから、私があなたが育てている物件の1つはそこにないと思います。リスクを最小限に抑えて問題を解決するには、次の実装をお勧めします。

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にも当てはまり、同じエラーを引き起こします。エラーは、 'handler(this、new PropertycChangedEventArgs(propertyName))'行で発生し、nullは見えません。:( –

関連する問題