1

我正在尝试 Unity,但在 XAML 中声明我的视图模型时遇到问题。你能帮我吗?XAML:

<UserControl.DataContext>
    <search:SearchBoxViewModel />
</UserControl.DataContext>

构造函数:

   [ImportingConstructor]
    public SearchBoxViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
    {
        this.regionManager = regionManager;
        this.eventAggregator = eventAggregator;
    }

当我尝试执行时,我得到一个分辨率失败异常。当视图模型有一个空的构造函数时,这很有效。似乎构造函数注入有问题。

如果我像这样加载模块:

var searchView = Container.Resolve<SearchBoxView>();
        searchView.DataContext = Container.Resolve<SearchBoxViewModel>();
        //RegionManager.RegisterViewWithRegion(RegionNames.SearchRegion, typeof(SearchBoxView));
        RegionManager.Regions[RegionNames.SearchRegion].Add(searchView);

有用。

有没有可能用 xaml 做到这一点(我个人认为更好)?

顺便说一句:我正在使用 wpf 创建一个应用程序,该应用程序主要与 web 服务进行通信。我应该使用什么:unity 或 MEF,两者之间的最大区别是什么?

谢谢,拉菲

4

1 回答 1

1

http://msdn.microsoft.com/en-us/library/ms753379.aspx

将自定义类作为 XAML 元素的要求

为了能够被实例化为对象元素,您的类必须满足以下要求:

  • 您的自定义类必须是公共的并支持默认(无参数)公共构造函数。(有关结构的注释,请参见以下部分。)

  • ...

因此,如果您想使用依赖项,您应该正确地执行以下操作:

var searchView = Container.Resolve<SearchBoxView>();

public class SearchBoxView: UserControl
{
  [Dependency]
  public SearchBoxViewModel ViewModel
  {
    get { return (SearchBoxViewModel)DataContext; }
    set { DataContext = value; }
}
于 2012-03-14T15:33:54.350 回答