1

Unityを試していますが、XAMLでビューモデルを宣言する際に問題が発生します。あなたは私を助けることができます?XAML:

<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でこれを行う可能性はありますか(私は個人的にはより良いと思います)?

ちなみに、私は主にWebサービスと通信するwpfを使用してアプリケーションを作成しています。どちらかと言えば、UnityまたはMEFのどちらを使用する必要がありますか?また、この2つの大きな違いは何ですか?

ありがとう、ラフィ

4

1 に答える 1

1

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

XAML 要素としてのカスタム クラスの要件

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

  • カスタム クラスは public で、デフォルト (パラメーターなし) の public constructor をサポートする必要があります。(構造に関する注意事項については、次のセクションを参照してください。)

  • ...

したがって、依存関係を使用する場合は、次のように修正する必要があります。

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

public class SearchBoxView: UserControl
{
  [Dependency]
  public SearchBoxViewModel ViewModel
  {
    get { return (SearchBoxViewModel)DataContext; }
    set { DataContext = value; }
}
于 2012-03-14T15:33:54.350 に答える