[英]UserControl Inheritance WPF
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
CS1729 C#'UserControl'不包含采用1个参数的构造函数
Why is not the constructor of the ViewBase
class called? 为什么不调用
ViewBase
类的构造函数?
It appears you inherited from ViewBase
in code behind but UserControl
in XAML. 看来您是从
ViewBase
中的代码继承而来的,而XAML是UserControl
的。
LoginView.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 LoginView.xaml.cs
namespace YourNameSpace.View
{
public partial class LoginView : ViewBase<LoginViewModel>
{
public LoginView(LoginViewModel viewModel)
: base(viewModel)
{
InitializeComponent();
}
}
}
ViewBase.cs 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;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.