2010-10-06 48 views
0

我有一系列視圖要顯示,這取決於父視圖中樹中當前選定的項目。這些視圖在父視圖的初始化方法期間創建並註冊到該區域,並且正在被正確地停用/激活,因此產生交換進/出正確視圖的效果。這些視圖具有單個底層視圖模型作爲其datacontext,其中包含支持INotifyPropertyChanged的數據對象。NullReferenceExeption當切換正在編輯的視圖時引發NotifyPropertyChanged

此解決方案適用於子視圖中當前沒有未完成的編輯正在進行但視圖中正在進行編輯的情況(即,用戶已更改描述的內容但尚未點擊文本框),並且該視圖被停用(即,在父視圖內單擊不同的樹項目,從而導致停用),NullReferenceException被拋出到附加到現在的基礎數據對象的NotifyPropertyChanged()取消激活的視圖。

什麼似乎是發生的事情是這樣的:

  • 一個編輯由子視圖用戶啓動
  • 用戶點擊父視圖在樹中的項目
  • 控制器選秀權爬在樹上
    • 當前的子視圖被禁用所選項目的變化
    • 新的視圖被激活
  • 從編輯的變化發生(set方法獲取調用)底層數據對象
  • 由數據對象產生的改變通知事件作爲這種變化
  • 一個空引用異常的結果被拋出。

推測這個更改通知事件正在發送到現在已停用的視圖,但該視圖不爲空。

回答

1

我自己沒有嘗試過,但我相信一個解決方案是使用IActiveAware來收聽視圖的停用事件並取消任何編輯。

看看this link有幫助。

+0

感謝您的幫助'已經夠了'。您的回答給了我一個想法,即在更改視圖之前簡單地保存當前未完成的更改。我可以在控制器代碼中輕鬆完成此操作。 – dbush 2010-10-13 15:20:15