我正在尝试Unity,我在XAML中声明我的viewmodel时遇到了问题。你能帮我吗? XAML:
<UserControl.DataContext>
<search:SearchBoxViewModel />
</UserControl.DataContext>
构造
[ImportingConstructor]
public SearchBoxViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
{
this.regionManager = regionManager;
this.eventAggregator = eventAggregator;
}
当我尝试执行时,我得到了resolutionfailedexception。 当viewmodel有一个空构造函数时,这个工作。好像它的构造函数注入有问题。
如果我像这样加载模块:
var searchView = Container.Resolve<SearchBoxView>();
searchView.DataContext = Container.Resolve<SearchBoxViewModel>();
//RegionManager.RegisterViewWithRegion(RegionNames.SearchRegion, typeof(SearchBoxView));
RegionManager.Regions[RegionNames.SearchRegion].Add(searchView);
有效。
有没有可能用xaml做这个(我个人认为更好)?
顺便说一句:我正在创建一个主要与web服务通信的wpf应用程序。我应该更倾向于用户:团结还是MEF以及两者之间的巨大差异?
谢谢, Raphi
答案 0 :(得分: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; }
}