2012-10-25 19 views
3

如何将CustomerRepository注入到CustomerVM视图模型中?在我看来,一个WPF页,我有:与WPF MVVM Unity,Generic Repository交错

<Page.DataContext> 
    <viewModel:CustomerVM/> 
</Page.DataContext> 

但我的视图模型构造显然有参数传入,

public CustomerVM(ICustomerRepository customerRepository) 
    { 
     //this._customerRepository = customerRepository; 
    } 

我得到

类型'CustomerVM'不可用作对象元素,因为它不是 公共或未定义公共无参数构造函数或类型 转换器。

真的很挣扎。

任何帮助表示赞赏。

+0

你能给我们提供这个错误的灵吗?或代码片段? – Danpe

+0

请参阅[这里] [1] 我建议视图模型定位方法 [1]:http://stackoverflow.com/questions/5830199/setting-viewmodels-property-from-xaml –

回答

1

如果您使用依赖注入,我不认为您可以在XAML中初始化DataContext。在视图的代码隐藏中设置DataContext,以便Unity可以解决依赖关系。尝试将此添加到YourView.xaml.cs中:

public YourView(CustomerVM viewModel) 
{ 
    InitializeComponent(); 

    this.DataContext = viewModel; 
} 

如果您通过Unity解析视图,上述方法将有效。如果没有,你还可以使用服务定位器来解决视图模型:如果你不使用棱镜

using Microsoft.Practices.ServiceLocation; 

public YourView() 
{ 
    InitializeComponent(); 

    this.DataContext = ServiceLocator.Current.GetInstance<CustomerVM>(); 
} 

您可能还需要添加某处你的注册码来设置服务定位如下:

ServiceLocator.SetLocatorProvider(new ServiceLocatorProvider(() => new UnityServiceLocator(_unityContainer))); 
+0

由于尽快导航到视图,并将视图模型作为参数get Object引用未设置为对象的实例。 ?????即使我有unitycontainer注册CustomerVM的实例? – CheGuevarasBeret

+0

请参阅我上面关于使用ServiceLocator来解析CustomerVM的编辑。如果这不起作用,您可以发布您的Unity注册码吗? –

+0

嗨迈克,开发机器不在这里,但在我的app.xaml..cs我有覆盖启动和代码如下:UnityContainer容器=新的UnityContainer容器(); container.registertype (); container.registertype ();这看起来是对的吗?干杯 – CheGuevarasBeret