有没有办法在自定义用户控件上解决无参数构造函数错误?

时间:2016-03-07 18:12:37

标签: c# wpf

我有一个Wpf应用程序,它具有某个视图子集的抽象基类,以及它们对应的视图模型,如下所示:

 public abstract class BaseForm<TViewModel> : UserControl, IBaseForm where TViewModel: BaseViewModel
{
    protected BaseForm(TViewModel viewModel)
    {
        DataContext = viewModel;
    }

    private TViewModel ViewModel
    {
        get { return DataContext as TViewModel; }
    }

    //Left out remaining implementation details 
}

 public abstract class BaseViewModel : ViewModelBase, IDisposable, IActiveAware, IDocumentContent, IStateAware
{
    //Left out implementation details
}

此应用程序使用组合根模式,因此当用户操作需要打开视图时,按需创建视图,因此缺少无参数构造函数。

在大多数情况下,此设置工作正常,所有内容都会编译并运行应用程序。

然而,当检查输出窗口时,我实际上可以看到BaseForm的实现抛出以下异常:

Type 'BaseForm' is not usable as an object element because it is not public or does not define a public parameterless constructor or type converter.

以下是一个实施示例:

<forms:BaseForm x:TypeArguments="viewModels:ProjectManagementViewModel" x:Class="MyProject.ProjectManagement"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:forms="clr-namespace:Eka.Common.Wpf.Forms;assembly=Eka.Common.Wpf"
         xmlns:viewModels="clr-namespace:MyProject.ViewModels"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>

</Grid>

public partial class ProjectManagement
{
    public ProjectManagement(ProjectManagementViewModel viewModel) : base(viewModel)
    {
        InitializeComponent();
    }
}

有没有办法修改我的类以删除此错误?

修改

根据我的评论,这个问题似乎有点像幻影,我在我的单元测试项目中遇到了一些我一直忽略的编译错误,在解决后,这些错误也消失了,我只是再次见到它们试图解决其他设计师的错误但不一致。

0 个答案:

没有答案