我确信我错过了一些简单的东西(在这个mvvm的东西上仍然有点绿色),但我认为使用ViewModelLocator删除了对viewmodel的DataTemplate绑定视图的需要。但由于某些原因,我似乎仍然需要它。
在WPF应用程序中,我有一个窗口,其唯一内容是绑定到默认绑定的内容模板。
<Window ... DataContext="{Binding MainView, Source={StaticResource Locator}}">
<grid><ContentControl Content="{Binding}"/></grid>
然后我有一个UserControl,我想你可以说是真实的视图 - viewmodel。
<UserControl ...
DataContext="{Binding MainView, Source={StaticResource Locator}}">
...xaml...
</UserControl>
我注意到的是,除非我在App.xaml中放置绑定视图的视图 - 视图模型(在本例中为MainView),我只是得到类的名称。
由于窗口的datacontext是使用定位器绑定的,我认为这样可行。我的猜测是,使用ContentControl的窗口中的附加层令人困惑。
如果我将ContentControl替换为对视图的直接引用,即
<view:MainView />
这也有效。所以我想我有两个问题: 1.为什么绑定似乎不明白? 2.有没有办法让定位器使用它?我希望窗口具有最小的ui,并在UserControls中保持批量。
感谢您提供任何信息。
遮住
答案 0 :(得分:1)
每个内容控件都可以包含任何对象,如果只是在没有DataTemplate的情况下分配类,则默认情况下将其转换为字符串。 DataTemplate说明了内容应该如何可视化,包括绑定(应该采用和评估你的对象的特性)。
ViewModelLocator与DataTemplates没有任何关系,它只是根据名称或您想要的任何内容为您找到正确的视图模型。这是如何解耦创建/定位视图模型的逻辑并将其放在一个地方的方法。