我剛剛開始使用WPF中的MVVM模式,並且決定構建我的代碼的最優雅方式是將視圖模型注入到視圖的構造函數中。MVVM - 視圖是否真的需要一個默認構造函數?
這一切都很好,但ReSharper在XAML中給出警告,我的視圖沒有默認的構造函數。我假設這是爲了能夠在需要時在XAML中構建我的視圖,但這只是一個猜測。
通過要求我的視圖在構造函數中使用視圖模型,我放棄了什麼?
編輯:我的觀點的構造是這樣的:
public ExampleView(ExampleViewModel viewModel)
{
if (viewModel == null) throw new ArgumentNullException("viewModel");
DataContext = 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>
無論如何,我在構造函數中設置DataContext,有沒有更好的模式呢? – 2009-04-23 07:14:14