UserControl继承WPF

时间:2017-03-15 12:23:10

标签: c# wpf inheritance uwp

我想为我的视图实现一个基类。该类如下所示:

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) { } } 类的构造函数?

1 个答案:

答案 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;
        }
    }
}