1

現代のUIフレームワークにはかなり慣れていません。ContentSource ページとして新しいページ (usercontroller) を追加しています。IOC フレームワーク (IviewModels および ViewModels) を使用しています。一致するコンストラクターが見つからないというエラーが表示されます。usercontroll のデフォルト コンストラクターに Iviewmodel オブジェクトが挿入されているためです。

私はここでかなり立ち往生しています。誰かがこの問題を助けることができれば素晴らしいと思い
ます

これは私のメイン ウィンドウ コードです + これは私の usercontroll cs ファイルです
これはエラーです

4

1 に答える 1

1

お気づきのように、パラメーター化されたコンストラクターはフレームワークを壊すため使用できません。ナビゲーションはページ URI のみを使用し、他の追加パラメーターは使用しません。

では、パラメーター化されたコンストラクターを使用せずに IoC を使用するにはどうすればよいでしょうか。依存性注入コンテナーを使用する必要があります。このようなもの:

public partial class MyPage: UserControl
{
  private MyViewModel: IViewModel;
  public MyPage()
  {
     MyViewModel = MyViewModelFactory.Create(IViewModel);
     InitializeComponent();
  }
}

MyVewModelFactory は、他のオブジェクトを作成するオブジェクトです。自分でコーディングする必要はありません。一般的な IOC コンテナーには次のものがあります。

  1. 団結
  2. MEF

Unity を使用すると、コードは次のようになります。

public partial class MyPage: UserControl
{
  private MyViewModel: IViewModel;
  public MyPage()
  {
    MyViewModel = container.Resove<IViewModel>();
    InitializeComponent();
  }
}

MEF を使用すると、コードは次のようになります。

public partial class MyPage: UserControl
{
  [Import(GetType(IViewModel))]
  private MyViewModel: IViewModel;
  public MyPage()
  {
     InitializeComponent();
  }
}
于 2014-12-23T14:28:11.930 に答える