如何在数据上下文的模型视图和视图之间正确传递参数

How to properly pass parameters between modelView and View for the datacontext

我有以下内容: - class AccountViewModel:BaseViewModel - AccountView.xaml

我很难将参数传递给 ModelView。

主要window,我把它们绑定在一起:

<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 由您的 DataTemplate DataType 定义时。它会自动传递给您的视图。

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>