在XAML中使用构造函数注入声明ViewModel
我正在尝试Unity,但在XAML中声明viewmodel时遇到问题。你能帮我吗? XAML: 当我尝试执行时,我得到一个resolutionfailedexception。 当viewmodel有一个空构造函数时,这就起作用了。它似乎在构造函数注入方面有问题 如果我像这样加载模块:在XAML中使用构造函数注入声明ViewModel,xaml,prism,unity-container,constructor-injection,Xaml,Prism,Unity Container,Constructor Injection,我正在尝试Unity,但在XAML中声明viewmodel时遇到问题。你能帮我吗? XAML: 当我尝试执行时,我得到一个resolutionfailedexception。 当viewmodel有一个空构造函数时,这就起作用了。它似乎在构造函数注入方面有问题 如果我像这样加载模块: var searchView = Container.Resolve<SearchBoxView>(); searchView.DataContext = Container.Resol
var searchView = Container.Resolve<SearchBoxView>();
searchView.DataContext = Container.Resolve<SearchBoxViewModel>();
//RegionManager.RegisterViewWithRegion(RegionNames.SearchRegion, typeof(SearchBoxView));
RegionManager.Regions[RegionNames.SearchRegion].Add(searchView);
var searchView=Container.Resolve();
searchView.DataContext=Container.Resolve();
//RegionManager.RegisterViewWithRegion(RegionNames.SearchRegion,typeof(SearchBoxView));
RegionManager.Regions[RegionNames.SearchRegion].Add(searchView);
它起作用了
有没有可能用xaml实现这一点(我个人认为用xaml更好)
顺便说一下:我正在使用wpf创建一个应用程序,它主要与Web服务通信。我应该选择什么:unity还是MEF?两者之间的最大区别是什么
谢谢,
拉菲:
自定义类作为XAML元素的要求
为了能够被实例化为对象元素,您的
类必须满足以下要求:
- 您的自定义类必须是公共类并且支持默认类 (无参数) 公共构造函数。(请参见以下章节了解有关 结构。)
var searchView = Container.Resolve<SearchBoxView>();
public class SearchBoxView: UserControl
{
[Dependency]
public SearchBoxViewModel ViewModel
{
get { return (SearchBoxViewModel)DataContext; }
set { DataContext = value; }
}
var searchView=Container.Resolve();
公共类SearchBoxView:UserControl
{
[依赖性]
公共SearchBoxViewModel视图模型
{
获取{return(SearchBoxViewModel)DataContext;}
设置{DataContext=value;}
}
:
自定义类作为XAML元素的要求
为了能够被实例化为对象元素,您的
类必须满足以下要求:
- 您的自定义类必须是公共类并且支持默认类 (无参数) 公共构造函数(有关 结构。)
var searchView = Container.Resolve<SearchBoxView>();
public class SearchBoxView: UserControl
{
[Dependency]
public SearchBoxViewModel ViewModel
{
get { return (SearchBoxViewModel)DataContext; }
set { DataContext = value; }
}
var searchView=Container.Resolve();
公共类SearchBoxView:UserControl
{
[依赖性]
公共SearchBoxViewModel视图模型
{
获取{return(SearchBoxViewModel)DataContext;}
设置{DataContext=value;}
}
是的,我知道它不会正常工作。我想也许prism开发人员有一些简便的黑客技术,可能已经实现了这一点。太糟糕了。但你的解决方案仍然比我的好。谢谢!@raphi011事实上,如果我没记错的话,这不是我的解决方案,我从prism书中偷了它:)是的,我知道它不会正常工作。我想prism开发者可能有一些很好的方法可以实现这一点。太糟糕了。但是你的解决方案还是比我的好。谢谢!@raphi011事实上,如果我没记错的话,这不是我的解决方案,我从prism书中偷来的:)
var searchView = Container.Resolve<SearchBoxView>();
public class SearchBoxView: UserControl
{
[Dependency]
public SearchBoxViewModel ViewModel
{
get { return (SearchBoxViewModel)DataContext; }
set { DataContext = value; }
}