资源中的DataTemplate将ViewModel设置为View,但随后

时间:2011-03-31 11:20:41

标签: wpf mvvm binding

我试图找出将视图的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。但是配置它的最佳方法是什么?如何解决这个问题?

3 个答案:

答案 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的第一种方法。