2012-03-14 4 views
1

Unity를 시험해보고 XAML에서 내 viewmodel을 선언하는 데 문제가 있습니다. 너 나 좀 도와 줄 수있어? XAML :XAML에서 생성자 삽입을 사용하여 ViewModel 선언

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

생성자 :

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

내가이 resolutionfailedexception을 얻을 실행하려고

. 뷰 모델에 빈 생성자가있는 경우이 기능이 작동합니다. 마치 생성자 삽입에 문제가있는 것처럼 보입니다.

나는이 같은 모듈을로드하는 경우 :

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

의미가 있습니다.

xaml에서이 작업을 수행 할 수 있습니까? (개인적으로 생각하면 좋을까요?)

그건 그렇고 : 주로 웹 서비스와 통신하는 wpf로 애플리케이션을 만들고 있습니다. 오히려 사용자에게 단결 또는 MEF를 적용해야하며이 둘의 큰 차이점은 무엇입니까?

감사합니다, Raphi

답변

1

http://msdn.microsoft.com/en-us/library/ms753379.aspx : 수하기 위해 XAML 요소

같은 사용자 정의 클래스에 대한

요구 사항, 당신의 개체 요소로 인스턴스화합니다 수업은 다음 요구 사항을 충족해야합니다.

  • 사용자 정의 클래스는 public이어야하며 은 기본값 (매개 변수 없음) public 생성자을 지원해야합니다. ( 구조에 관한 메모 다음 섹션을 참조하십시오.)

  • ...

을 그래서, 당신은 종속성을 사용하려는 경우, 당신이해야 바로 무엇인가 :

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

public class SearchBoxView: UserControl 
{ 
    [Dependency] 
    public SearchBoxViewModel ViewModel 
    { 
    get { return (SearchBoxViewModel)DataContext; } 
    set { DataContext = value; } 
} 
+0

네 나는 그것이 정상적으로 작동하지 않을 것이라는 것을 알았다. 아마도 프리즘 개발자는 이것을 구현했을 가능성이있는 편리한 해킹을 가지고 있다고 생각했습니다. 너무 나빴어. 그러나 당신의 해결책은 여전히 ​​나의 것보다 낫습니다. 감사! – raphi011

+0

@ raphi011 사실, 내가 올바르게 기억한다면 그것은 내 해결책이 아니야, 나는 프리즘 책에서 그것을 훔쳤다. :) – chopikadze