我对WPF和MVVM模式还不是很熟悉。我现在的情况是,我的应用程序与Outlook (2007)类似。左侧有一个导航窗格,其中显示了编辑器列表,右侧则是内容窗格,在其中以选项卡形式显示编辑器。我的一些编辑器看起来非常相似。它们都有一个顶部窗格,其中包含要编辑的项目网格。选择项目后,底部窗格将显示一个表单样式的编辑器,其中包含文本框、组合框等等。我想将这些编辑器的基本功能封装在一个基类中。但是,据我所读,您无法继承XAML。我看到有人提出的一个解决方案是创建没有XAML(只有.cs文件)的基础UserControl类。然后,我的每个编辑器视图都可以从它继承,并融入特定于编辑器的项目,尤其是底部编辑窗格。每个编辑器都将拥有自己的视图模型,但它们也将从一个公共的视图模型基类继承。这是一个好的解决方案吗?还是有更好的方法?
编辑:接下来我的问题是如何做到呢?我已经创建了以下没有XAML的基类(动态创建3行),第一行包含一个DataGrid。基类将定义网格,但子类将设置绑定。第二行只包含一个网格拆分器。第三行为空。这是特定的编辑器将放置自己的用户控件的地方。
编辑:接下来我的问题是如何做到呢?我已经创建了以下没有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中也将其开始/结束标签设置为BaseEditor。
我可以在特定编辑器的设计器中看到控件。然而,我很快发现这不是我所期望的。如果我开始在特定编辑器的XAML中添加内容,它并不会进入第三行。所以,我似乎漏掉了某些东西。在Windows Forms中,你可以使用属性创建Content区域,并且设计器只能编辑该区域。在WPF中如何做类似的事情,使所有内容都进入第三行呢?