如何正确传递模型视图和视图之间的参数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
由您的DataTemplate
DataType
定义时。它会自动传递给你的视图。
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>
我竟然浪费时间.. 。 非常感谢! – dyesdyes
@dyesdyes你的欢迎:) –