【发布时间】:2009-04-23 06:53:36
【问题描述】:
我刚刚开始使用 WPF 中的 MVVM 模式,我认为构建我的代码的最优雅的方法是将视图模型注入到视图的构造函数中。
这一切都很好,但是 ReSharper 在 XAML 中给出了一个警告,即我的视图没有默认构造函数。我假设这样做是为了在需要时可以在 XAML 中构建我的视图,但这只是一个猜测。
要求我的视图在构造函数中采用视图模型,我放弃了什么?
编辑:我的视图构造函数如下所示:
public ExampleView(ExampleViewModel viewModel)
{
if (viewModel == null) throw new ArgumentNullException("viewModel");
DataContext = viewModel;
}
回答:我选择了以下设置,其中 DesignTime 命名空间包含 ViewModel 的模拟版本,用于测试和设计时支持。
ExampleView.xaml.cs
public ExampleView()
{
InitializeComponent();
}
public ExampleView(IExampleViewModel viewModel)
: this()
{
DataContext = viewModel;
}
ExampleView.xaml
<UserControl
x:Class="Wpf.Examples.ExampleView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:DesignTime="clr-namespace:Wpf.Examples.DesignTime">
<UserControl.DataContext>
<DesignTime:ExampleViewModel/>
</UserControl.DataContext>
</UserControl>
【问题讨论】:
标签: wpf mvvm dependency-injection