我试图找出将视图的datacontext设置为视图模型的许多不同方法。
此刻我正在One goes这样的事情:
我有我的MainWindowResource:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vw="clr-namespace:DemoStuffPartII.View"
xmlns:vm="clr-namespace:DemoStuffPartII.ViewModel">
<DataTemplate DataType="{x:Type vm:PersonViewModel}">
<vw:PersonView />
</DataTemplate>
但那也是我的立刻。我知道我应该在View中使用ContentControl。但是配置它的最佳方法是什么?如何解决这个问题?
答案 0 :(得分:2)
这是在MVVM应用程序中启用ViewSwitching导航的方法。
其他缺失的部分是: 在视图中 - &gt;
<ContentControl Content="{Binding CurrentPage}" />
在ViewModel中 - &gt; (伪代码)
Prop ViewModelBase CurrentPage.
但是请注意,如果您只想将ViewModel连接到View,您可以完全删除整个DataTemplate-ContentControl,然后执行此操作.DataContext = new SomeViewModel();在代码隐藏中。
我知道将VM连接到Views的最简单方法是使用ViewModelLocator模式。 Google ViewModelLocator。
答案 1 :(得分:1)
将ViewModel绑定到视图有几种简单的方法。正如Elad所说,你可以在代码隐藏中添加它:
_vm = new MarketIndexVM();
this.DataContext = _vm;
或者,您可以将ViewModel指定为视图的XAML中的资源:
<UserControl.Resources>
<local:CashFlowViewModel x:Key="ViewModel"/>
<Converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
并将LayoutRoot的DataContext绑定到该资源:
<Grid x:Name="LayoutRoot" DataContext="{StaticResource ViewModel}">
答案 2 :(得分:0)
也许这并没有直接回答你的问题,但是你看过使用MVVM框架吗?例如,在Caliburn.Micro中你会做(非常基本的例子):
public class ShellViewModel : Conductor<IScreen>
{
public ShellViewModel()
{
var myViewModel = new MyViewModel();
this.ActivateItem(myViewModel);
}
}
ShellView.xaml
<Grid>
<ContentControl x:Name="ActiveItem" />
</Grid>
MyView.xaml
<Grid>
<TextBlock>Hello world</TextBlock>
</Grid>
这是viewmodel的第一种方法。