我有一个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();
}
}
有没有办法修改我的类以删除此错误?
修改
根据我的评论,这个问题似乎有点像幻影,我在我的单元测试项目中遇到了一些我一直忽略的编译错误,在解决后,这些错误也消失了,我只是再次见到它们试图解决其他设计师的错误但不一致。