2012-03-14 21 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を取得し、実行しようとします。 これは、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

答えて

1

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

などのカスタムクラスのための

要件オブジェクト要素としてインスタンス化することができるようにするために、あなたの クラスは次の要件を満たしている必要があります。

  • カスタムクラスは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実際に、私が正しく覚えていれば、それは私の解決策ではなく、私はPrismの本から盗んだのです:) – chopikadze

関連する問題