如何正确传递模型视图和视图之间的参数DataContext的

问题描述:

我有以下几点: - 类AccountViewModel:BaseViewModel - AccountView.xaml如何正确传递模型视图和视图之间的参数DataContext的

我挣扎传递参数给模型视图。

在主窗口

,我将它们绑定在一起:

<DataTemplate DataType="{x:Type local:AccountViewModel}"> 
    <local:AccountView /> 
</DataTemplate> 

在mainWindowViewModel,我有一个动作做显示的客户视图:

ChangeViewModel(new AccountViewModel(new DateTime(2016, 2, 06), new DateTime(2016, 2, 15))) 

正如你所看到的, AccountViewModel为其构造函数使用2个参数,2个Datetime。

然后在AccountView,我尝试做创建的DataContext:

<UserControl.DataContext> 
    <ObjectDataProvider ObjectType="local:AccountViewModel" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
     <ObjectDataProvider.ConstructorParameters> 
      <sys:DateTime></sys:DateTime> 
      <sys:DateTime></sys:DateTime> 
     </ObjectDataProvider.ConstructorParameters> 
    </ObjectDataProvider> 
</UserControl.DataContext> 

无论我做什么,它会创建AccountViewModel的另一个实例。我不希望这样,我希望这个AccountView继续使用我在上面显示的命令中创建的AccountViewModel,但我也想使用绑定功能。如果可能,我宁愿尽量避免使用代码。

我怎样才能做到这一点?

您不需要在ViewModel上创建额外的对象。当您的View由您的DataTemplateDataType定义时。它会自动传递给你的视图。

See this answer to understand DataContext here

View删除你的下面的代码,并检查DataContext,这将是local:AccountViewModel:的东西,并不需要固定

<UserControl.DataContext> 
<ObjectDataProvider ObjectType="local:AccountViewModel" 
xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <ObjectDataProvider.ConstructorParameters> 
     <sys:DateTime></sys:DateTime> 
     <sys:DateTime></sys:DateTime> 
    </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider> 

+1

我竟然浪费时间.. 。 非常感谢! – dyesdyes

+0

@dyesdyes你的欢迎:) –