如何在数据上下文的模型视图和视图之间正确传递参数
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>
我有以下内容: - 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>