我想为我的视图实现一个基类。该类如下所示:
iteritems
这是基类的用法:
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);
}
}
问题是,当我尝试上面的代码时,我收到以下错误:
CS1729 C#'UserControl'不包含带1的构造函数 参数
为什么不调用public sealed partial class LoginView : ViewBase<LoginViewModel>
{
public LoginView(LoginViewModel viewModel) : base(viewModel)
{
}
}
类的构造函数?
答案 0 :(得分: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 强>
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;
}
}
}