我对WPF和MVVM模式有点新鲜。这是我的情况。我的应用程序看起来与Outlook(2007)类似。有一个带有编辑列表的左侧导航窗格和编辑器将显示在标签中的正确内容窗格。我的一些编辑有一个非常相似的外观。他们将有一个顶部窗格,其中包含要编辑的项目网格。一旦选择一个项目,底部窗格将显示一个带有文本框,组合框等的窗体式编辑器。我想将这些编辑器的基本功能封装在一个基类中。但是,从我读过的内容来看,你不能继承XAML。我看到有人提到的一个解决方案是创建没有XAML(仅.cs文件)的基本UserControl类。然后,我编辑器的每个视图都可以继承它,并包含编辑器特定的项目 - 特别是底部的编辑窗格。每个编辑器都有自己的视图模型,但它们也会从一个普通视图模型基类继承而来。这是一个很好的解决方案还是有更好的方法。如何在使用MVVM模式时继承WPF中的视图?
编辑:
所以我的下一个问题是如何?我创建了以下基类(不带XAML),可以动态创建3行。第一行包含DataGrid
。基类将定义网格,但子类将设置绑定。第二行只包含一个网格分离器。而第三行是空的。这是特定编辑器将自己的用户控件放置的位置。
public class BaseEditor : UserControl
{
public BaseEditor()
{
RowDefinition gridRow = new RowDefinition();
RowDefinition splitterRow = new RowDefinition();
RowDefinition editorRow = new RowDefinition();
_userControlsGrid.RowDefinitions.Add(gridRow);
_userControlsGrid.RowDefinitions.Add(splitterRow);
_userControlsGrid.RowDefinitions.Add(editorRow);
EditorGrid = new DataGrid();
Grid.SetRow(EditorGrid, 0);
_userControlsGrid.Children.Add(EditorGrid);
GridSplitter gridSplitter = new GridSplitter();
Grid.SetRow(gridSplitter, 1);
_userControlsGrid.Children.Add(gridSplitter);
AddChild(_userControlsGrid);
}
}
然后,我试图创建一个从BaseEditor继承的特定编辑器。我已经将cs文件中的基类设置为BaseEditor,并且我还将xaml中的begin/end标记设置为BaseEditor。
我看到了特定编辑器设计者中的控件。不过,我很快看到这不是我所期望的。如果我开始在特定编辑器的XAML中添加内容,那么它不在第三行。所以,我错过了一些东西。在Windows窗体中,您可以使用属性创建一个内容区域,设计人员只能编辑该区域。我如何在WPF中做类似的事情,使所有的内容进入第三行?