Prism / mef ViewModel:针对ctor的属性和属性

时间:2011-01-04 11:03:51

标签: mvvm prism

在StockTraderRI示例代码中,MEF使用属性注入ViewModel:

[Export(typeof(IOrdersView))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class OrdersView : UserControl, IOrdersView
{
  public OrdersView()
  {
    InitializeComponent();
  }

  [Import]
  [SuppressMessage("Microsoft.Design", "CA1044:PropertiesShouldNotBeWriteOnly", Justification = "Needs to be a property to be composed by MEF")]
  public IOrdersViewModel ViewModel
  {
    set { this.DataContext = value; }
  }
}

我想知道的是:为什么不使用像这样的ImportingConstructor来注入ViewModel:

[Export(typeof(IOrdersView))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class OrdersView : UserControl, IOrdersView
{
  [ImportingConstructor]
  public OrdersView(IOrdersViewModel ViewModel)
  {
    InitializeComponent();
    this.DataContext = ViewModel;
  }
}

是否有特殊功能,问题或原因我想念为什么StockTraderRI样本确实使用了Property而不是ctor的参数?

1 个答案:

答案 0 :(得分:5)

因为在XAML中部分定义的类型不能很好地与参数化构造函数一起使用。 XAML建立在“创建一个空白对象并在之后填充属性”范例之后。