所以我開始研究Catel MVVM框架,它看起來會解決我遇到的一些問題,但我有一個非常愚蠢的問題。我想我只是缺少一些小東西。在Catel中使用WPF設置DataContext
我帶着我的一個小型WPF項目來切換Catel,作爲我學習它的一種方式。我有一個簡單的「玩家註冊」表單,包含名字和姓氏等字段。我通過使用vm codesnippet重新創建了我的原始視圖模型,並且所有這些都很好,我已經在文檔中閱讀了所有屬性和屬性。
然後,我將用於'Player Registration'(PlayerRegistrationView)的UserControl更改爲catel:UserControl。我把PlayerRegistrationView在標準WPF窗口(沒有別的,只是一個的xmlns的視圖和視圖窗口上的唯一內容,沒有屬性)
但這裏是我的問題:
我有一個主窗口用一個按鈕打開窗口進行玩家註冊。上單擊事件簡單說就是:
private void ButtonPlayerClick(object sender, RoutedEventArgs e)
{
var playerRegistration = new PlayerRegistrationDialog
{
Owner = this,
DataContext = new PlayerRegistrationViewModel(),
};
playerRegistration.Show();
}
運行了一個程序,然後單擊按鈕結果中點擊在引發NotSupportedException我PlayerRegistrationView:視圖的視圖模型無法解析。使用GetViewModelType()方法或IViewModelLocator
我試着讓ViewModel成爲窗口的靜態資源,並在那裏設置了datacontext,但是它產生了相同的錯誤。
我不知所措。我錯過了什麼?
感謝
感謝您的回覆。好的,所以我只是想保持簡單。我製作了一個Catel的PlayerRegistrationDialog:DataWindow。我還創建了一個PlayerRegistrationDialogViewModel(使用vm codesnippet)。我在主窗口(這是一個標準窗口)上的按鈕上的on-click事件中使用了上面的代碼。現在我得到一個WindowNotRegisteredException - 沒有註冊爲'PlayerRegistrationDialogViewModel'的窗口 – pjdupreez
您沒有遵循命名約定。有關更多信息,請參閱https://catelproject.atlassian.net/wiki/display/CTL/ViewModelLocator。 如果您不遵守命名約定,則必須手動註冊您的視圖/視圖模型。 –
嗨吉爾特, 好的,所以我終於有一段時間再看看我的問題,你的建議。我是否正確地說,視圖模型需要與視圖位於同一個項目中?我創建了一個使用WPF應用程序和Catel模板的新項目。我在解決方案中添加了一個類庫,並將ViewModel文件夾移動到該項目中,然後運行該程序,然後給我:'與指定綁定約束匹配的類型'CatelWPFTest.Views.MainWindow'上的構造函數的調用引發異常。行號「5」和行位置「2」。 – pjdupreez