在我MainWindow
我有這樣的:如何訪問從一個用戶控件主窗口的datacontext已宣告但尚未當地一個
<Window.DataContext>
<viewModel:ActiveRecord />
</Window.DataContext>
在我UserControl
我有這樣的:
<UserControl.DataContext>
<search:CustomerSearch />
</UserControl.DataContext>
我說這之前'本地'綁定我會參考我的UserControl
這樣的「模塊化」綁定:
var vm = this.DataContext as ViewModel.ActiveRecord;
,但因爲我想引用2個不同的綁定,它似乎不再工作。我的意思是我用值填充ActiveRecord
,但當我導航到另一種形式時,這些值爲空。
我想我需要做的是訪問Mainwindow's
DataContext
這樣的:
var vm = MainWindow.DataContext as ViewModel.ActiveRecord;
當然DataContext
的,但不是我怎麼能做到這一點的MainWindow
的屬性?
您不應該像在XAML中那樣對.DataContext進行硬編碼。它默認WPF的最大優點之一是具有單獨的用戶界面和數據層,並且可能在以後引發各種問題。根據你迄今爲止所說的,聽起來你最好擁有一個CustomerSearch屬性的ActiveRecord,並且使用一個Implicit DataTemplate來綁定它。也就是說,Window應該有一個DataContext屬性,我很確定MainWindow從Window繼承...你確定你有正確的參考嗎?或者只是施放它。 – Rachel
@Rachel感謝您抽出時間發表評論。我從教程中複製了XAML datacontext的東西,但現在你解釋了爲什麼你不應該這樣做是完全不合理的。 Window對象不公開DataContext方法 - 它是一個靜態對象嗎?我最終將CustomerSearch放入ActiveRecord類中。在「模塊化」範圍的代碼中,如何設置數據上下文的首選方式/方式是什麼?謝謝BTW –
通常我會有一個'AppViewModel'來代表整個應用程序。從那裏,應用程序的每個屏幕通常都有它自己的ViewModel,比如'HomeViewModel'或'SearchViewModel'。這些是AppViewModel的屬性。每個屏幕虛擬機可以包含表示UI上元素的其他ViewModel或模型的屬性,例如可能是ActiveRecord。 [這是我的博客文章](https://rachel53461.wordpress.com/2011/12/18/navigation-with-mvvm-2/)應該讓你知道我的意思,或者[這個答案]( http://stackoverflow.com/a/12322363/302677) – Rachel