2013-08-31 39 views
2

所以我開始研究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,但是它產生了相同的錯誤。

我不知所措。我錯過了什麼?

感謝

回答

2

Catel的整點是,它會自動線了各方面的意見和視圖模型。你試圖實現的「複雜」事物是你有一個放在窗戶上的視圖。您希望窗口與視圖具有相同的數據上下文,以便在窗口中執行某些操作。

在Catel中,可以在DataWindow(Catel中的窗口)上放置任何具有datacontext管理的視圖。然後,它會像這樣:

的DataWindow | =>查看

如果數據窗口,並查看共享相同視圖模型類型,那麼它們共享同一個視圖模型。例如:

  • PlayerRegistrationWindow =>導出從catel:數據窗口
  • PlayerRegistrationView =>從catel導出:用戶控件

由於兩個開始PlayerRegistration,他們都將被自動解析爲PlayerRegistrationViewModel。

要顯示窗口,你所要做的唯一事情是這樣的:

VAR視圖模型=新PlayerRegistrationViewModel();

var uiVisualizerService = ServiceLocator.Default.ResolveType<IUIVisualizerService>(); 
uiVisualizerService.Show(viewModel); 

所有將自動工作,你不必擔心自己設置任何datacontext。

+0

感謝您的回覆。好的,所以我只是想保持簡單。我製作了一個Catel的PlayerRegistrationDialog:DataWindow。我還創建了一個PlayerRegistrationDialogViewModel(使用vm codesnippet)。我在主窗口(這是一個標準窗口)上的按鈕上的on-click事件中使用了上面的代碼。現在我得到一個WindowNotRegisteredException - 沒有註冊爲'PlayerRegistrationDialogViewModel'的窗口 – pjdupreez

+0

您沒有遵循命名約定。有關更多信息,請參閱https://catelproject.atlassian.net/wiki/display/CTL/ViewModelLocator。 如果您不遵守命名約定,則必須手動註冊您的視圖/視圖模型。 –

+0

嗨吉爾特, 好的,所以我終於有一段時間再看看我的問題,你的建議。我是否正確地說,視圖模型需要與視圖位於同一個項目中?我創建了一個使用WPF應用程序和Catel模板的新項目。我在解決方案中添加了一個類庫,並將ViewModel文件夾移動到該項目中,然後運行該程序,然後給我:'與指定綁定約束匹配的類型'CatelWPFTest.Views.MainWindow'上的構造函數的調用引發異常。行號「5」和行位置「2」。 – pjdupreez

相關問題