2017-03-15 31 views
0

私は自分のビューの基本クラスを実装したいと思っていました。このクラスは、次のようになります。これは、基本クラスの利用があるUserControl継承WPF

public abstract class ViewBase<T> : UserControl, IView where T : ViewModelBase 
{ 
    protected ViewModelBase viewModel; 

    public ViewBase(T viewModel) : base() 
    { 
     this.InitializeComponent(); 

     this.viewModel = viewModel; 
     this.DataContext = viewModel; 
    } 

    protected abstract void InitializeComponent(); 

    public void OnViewCalled(object parameters) 
    { 
     this.viewModel.OnCalled(parameters); 
    } 
} 

public sealed partial class LoginView : ViewBase<LoginViewModel> 
{ 
    public LoginView(LoginViewModel viewModel) : base(viewModel) 
    { 
    } 
} 

問題は、私は上記のコードをしようとしたとき、私は次のエラーを取得ことです:

CS1729 C# 'UserControl' does not contain a constructor that takes 1 arguments

ViewBaseクラスのコンストラクタが呼び出されないのはなぜですか?

+0

ultコンストラクタも同様です。 – dcg

+0

部分クラスを定義しました。おそらくクラスの一部はXAMLで定義されていますか?また、XAMLのViewBaseから継承したのですか、UserControlを使用しましたか? –

+0

私は 'UserControl'から継承しました –

答えて

3

ViewBaseからコードが継承されていますが、XAMLではUserControlに継承されているようです。

LoginView.xaml

<Local.View:ViewBase x:Class="YourNameSpace.View.LoginView" 
        x:TypeArguments="Local.ViewModel:LoginViewModel" 
        xmlns:Local.View="clr-namespace:YourNameSpace.View" 
        xmlns:Local.ViewModel="clr-namespace:YourNameSpace.ViewModel"> 
</Local.View:ViewBase> 

LoginView.xaml.cs私はあなたがDEFAを定義するために持っていると思う

namespace YourNameSpace.View 
{ 
    public partial class LoginView : ViewBase<LoginViewModel> 
    { 
     public LoginView(LoginViewModel viewModel) 
      : base(viewModel) 
     { 
      InitializeComponent(); 
     } 
    } 
} 

ViewBase.cs

namespace YourNameSpace.View 
{ 
    public abstract class ViewBase<T> : UserControl 
     where T : ViewModelBase 
    { 
     protected ViewModelBase ViewModel; 

     public ViewBase(T viewModel) 
      : base() 
     { 
      ViewModel = viewModel; 
      DataContext = ViewModel; 
     } 
    } 
} 
+0

これは '抽象'基本クラスであり、デフォルトのコンストラクタを含んでいないので動作しませんが、一般的に私のコードをこのように変更したくありません。それを達成する可能性はありますか? –

+0

あなたの問題は '抽象的な'に関係するべきではなく、パラメータのないコンストラクタは必要ありません。それは提供されたとして動作するはずですが、私はあなたが以前に述べたようにInitializeComponentで問題があると思う。 –

+0

コードを試しましたが、ビューコードが生成されたときにジェネリックタイプが含まれていないため、まだエラーがあります:/ –

関連する問題