简体   繁体   English

UserControl继承WPF

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM