我有一個奇怪的問題,我似乎無法找到任何答案。MVVM輕,Metro應用程序,繼承ViewModelBase打破設計模式
我正在使用MVVM Light通過NuGet使用Visual Studio 2012構建Metro Store應用程序。
在設計和添加數據上下文xaml代碼時,studio給我帶來了錯誤「對象引用未設置爲對象實例」的紅色swiggly。
DataContext={Binding MainVM, Source={StaticResource Locator}}
我終於把它縮小到我的viewmodel中的繼承。我有一個基礎視圖模型,我所有的ViewModels繼承宣佈爲:所有我的ViewModels這樣
public class BaseViewModel : ViewModelBase
{
}
那麼很明顯:現在
public class MainViewModel : BaseViewModel
{
}
,在運行時的一切工作完全正常(這是混亂我),但設計模式打破了。
但是,如果我刪除繼承和有我的ViewModels直接繼承ViewModelBase,一切都在設計模式罰款:
public class MainViewModel : ViewModelBase
{
}
我想,也許什麼東西在代碼中導致一個問題,所以我評論除了編譯所需要的東西外,所有的東西都完成了,並且仍然收到相同的結果
任何人似乎都有這個問題,或知道我可能做錯了嗎?我通常在使用MVVM處理Silverlight或WPF應用程序時使用相同的模式,並且在那裏看起來很好。
只是一個旁註,我的ViewModelLocator確實有一個返回MainViewModel類的MainVM屬性。
UPDATE 閱讀LBugnion和威爾的意見後,我正準備調試設計模式時,我注意到我goofily已經忘記了在BaseViewModel註釋掉我的代碼。我確實發現那裏有破壞代碼。設計模式不喜歡以下行:
private CoreDispatcher UIDispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
我正在用它來更新代碼中的UI線程。我猜測(哪個更有經驗的人可能會參與其中)在設計模式中沒有UI線程?
通常我使用「IsInDesignMode」屬性,以使我的ViewModels幾乎非功能性的設計,但顯然忘了所以在這裏做,所以我改變以上
private CoreDispatcher UIDispatcher = IsInDesignModeStatic ? null : Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
我混日子行
我經常這樣做,所以通常這不應該打破設計模式。必須在某個地方拋出異常,你是否嘗試調試設計模式代碼? – LBugnion
是的,我通常也和其他技術一樣,所以我認爲這可能是地鐵的事情。顯然我錯了,我搞錯了我的調試(正如上面更新中所述),所以現在一切正常。謝謝! –