我相信我缺少一些簡單的東西(在這個mvvm的東西上仍然有點綠),但我認爲ViewModelLocator的使用移除了對ViewModel的DataTemplate綁定視圖的需求。但由於某種原因,我似乎仍然需要它。ViewModelLocator是否應該刪除DataTemplate的必要性?
在WPF應用程序中,我有一個窗口,其唯一內容是一個內容模板,它綁定到默認綁定。
<Window ... DataContext="{Binding MainView, Source={StaticResource Locator}}">
<grid><ContentControl Content="{Binding}"/></grid>
然後我有一個用戶控件,我猜你可以說是真正的視圖 - viewmodel。
<UserControl ...
DataContext="{Binding MainView, Source={StaticResource Locator}}">
...xaml...
</UserControl>
我所注意到的是,除非我把DataTemplate中結合視圖 - 在App.xaml中(在這種情況下的MainView)視圖模型,我剛剛得到的類的名稱。
由於窗口的datacontext使用定位器綁定,所以我認爲這會起作用。我的猜測是,使用ContentControl的窗口中的附加層令人困惑。
如果我用視圖的直接引用替換ContentControl,即。
<view:MainView />
這也適用。所以我想我有兩個問題: 1.爲什麼綁定似乎不明白這一點? 2.有沒有辦法讓這個工作使用定位器?我想用最小的UI來創建窗口,並在UserControls中保留批量。
謝謝你的任何信息。
遮擋
謝謝,所以如果我明白我可以跳過window.xaml中的DataContext綁定行並使用App.xaml中的DataTemplate,它將告訴contentcontrol如何顯示。但是我仍然需要爲用戶控件(mainview)提供DataContext綁定。所以,這意味着如果我把一個contentcontrol放在usercontrol(mainview)中並指定另一個view-viewmodel(比如說customerview.xaml),我還需要另一個DataTemplate來綁定這個視圖。 – Obscured 2011-03-14 20:24:03
是的,這是正確的,你設置用戶控件的DataContext,你可以在一個頁面上有多個用戶控件,每個都有自己的ViewModel,當然也有自己的DataTemplate – Robert 2011-03-14 21:32:27
也..在你的例子中,你可以使用:{綁定}抓住父控件綁定。但我通常將usercontrols的datacontext設置爲他們自己的VM,並且這些將在他們自己的XAML中。 – ecathell 2011-05-29 12:36:17