UserControl
はviewmodel
にバインドされています。 viewmodel
には、依存関係注入を介して行われるコンストラクタ内のパラメータがあります。この時点まで、依存性注入は正常に動作しています。UnityContentからUserControl ViewModelからCustomUsercontrolへの注入Viewmodel
そして、UserControl1View
で使用されているCustomUserControl
があります。 私はCustomUserControl
に依存性注入を働かせますか?
私は依存症注入を初めて経験しており、いくつかの研究を行っていますが、それを機能させるようには見えません。
ここでは、コードの例です:私は、これは誤りである
public partial class UserControl1View : UserControl, IView {
public UserControl1View() {
InitializeComponent();
}
}
にエラーが発生します。
ユーザーコントロール:
public partial class UserControl1View : UserControl, IView {
public UserControl1View() {
InitializeComponent();
}
}
UserControlViewModel:
public class UserControl1ViewModel
{
private readonly ISomeDataService dataService;
public UserControl1ViewModel (ISomeDataService dataservice, IUnityContainer container)
{
//Please note that the Dependency injection still works in this class, to much to explain the whole structure.
this.dataService = dataservice;
container.RegisterType(typeof(IView), typeof(CustomUserControlView));
var view = container.Resolve<CustomUserControlView>();
}
XAML:
<uc:CustomUserControlView/>
CustomUserControl:
public partial class CustomUserControlView : UserControl, IView
{
public CustomUserControlView(IUnityContainer container)
{
container.RegisterType(typeof(IViewModel), typeof(CustomControlViewModel));
var viewModel = container.Resolve<CustomControlViewModel>();
this.DataContext = viewModel;
InitializeComponent();
}
}
CustomUserControlViewModel:
public partial class CustomUserControlViewModel : UserControl, IView
{
private readonly ISomeDataService dataService;
public CustomUserControlViewModel(ISomeDataService dataservice)
{
var data = dataService.GetsomeCollection()
}
}
こんにちはおかげで、それはあなたが考えること以上のことを助けMVVMの全体の目的を打つあなたのビューへの参照を持っているとして、サイドノートで
、あなたのUserControl1ViewModel
はMVVMに違反します。私は次のことを疑問に思います。WPFについては、ビューまたはユーザーコントロールは原則として同じものではありませんか?簡単にするために、すべてのWPFウィンドウ/ビューはこの特定のプロジェクトのユーザコントロールです。そして私は、プロジェクト内で共有されているすべてのusercontrolsが存在する共有と呼ばれるフォルダを持っています。私のusercontrolは、プロジェクトの外で使用する必要はありませんので、私はviewmodelが注入されているビューモデルにリンクしたいです。 – user1702369技術的にはそうですが、私が言ったように:Viewはロジックがないので、コードはありません。 CalendarControl(ユーザーコントロール)は、カレンダーを描画し、コードビハインドの一部であるクリックなどを処理し、アプリケーション固有のビューモデルがバインドできるDependencyPropertiesを公開する必要があります。純粋な見方では、DPsは必要ありません – Tseng