我對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中做類似的事情,使所有的內容進入第三行?