Reputation: 3968
I wanted to implement a base class for my views. This class looks like the following:
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);
}
}
This is the usage of the base class:
public sealed partial class LoginView : ViewBase<LoginViewModel>
{
public LoginView(LoginViewModel viewModel) : base(viewModel)
{
}
}
The problem is that when I try the above code, I get the following error:
CS1729 C# 'UserControl' does not contain a constructor that takes 1 arguments
Why is not the constructor of the ViewBase
class called?
Upvotes: 0
Views: 1426
Reputation: 4950
It appears you inherited from ViewBase
in code behind but UserControl
in XAML.
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
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;
}
}
}
Upvotes: 3