我不確定我們是否在同一頁面上,但我假設您的MainViewModel
類就像是一個「基本視圖模型」類。我在我的MVVM項目中有一個通用的BaseViewModel
類,但我也有通用的BaseDataType
類以及(都)將INotifyPropertyChanged
接口暴露給擴展類。在我的應用程序中,我有一系列Manager
類實現Singleton模式(例如,每個模式只能有一個)。 BaseViewModel
類將這些有價值的管理器類公開給擴展視圖模型類。每個經理類都提供了一些更多功能。例如,請參見下面的列表:
StateManager:保持在整個應用程序
DependencyManager全局數據/對象的狀態:保持與接口的集合,其具體實現
FeedbackManager依賴:保持訪問(用於用戶反饋)的應用反饋控制
窗口管理器:提供了文件對話框和子窗口管理
CLI訪問pboardManager:提供對計算機的訪問剪貼板
UiThreadManager:提供對多線程
EmailManager:提供訪問能夠發送電子郵件
HardDriveManager:可用於訪問用戶的計算機硬盤驅動器
ExportManager:可用於訪問XML生成和FTP傳輸
DataOperationManager:提供對所有的數據存取操作(下面進一步解釋)
UpdateManager:可用於訪問應用程序的更新
SecurityManger:提供對所有安全事項
ExcelManager:提供了對基於視圖模型數據生成Excel文檔的功能。
所有這些管理器類都可以從擴展BaseViewModel
類的任何視圖模型訪問。
除此之外,我(摘要)BaseViewModel
也暴露了均要求在每個視圖某些Command
對象,如「保存」,刪除」,‘刷新’等
最後,它也提供了訪問經常使用的功能如'InsertNewDataTypeToCollection'和'RemoveDataTypeFromCollection'方法。
除了'框架'的這部分,我還有一些基礎數據類型類。這些提供了常用的屬性和常用的功能,如數據同步,動畫,數據錯誤報告('IDataErrorInfo'界面的擴展),它自動鏈接到反饋控制。
我的系統的最後一部分是圍繞數據庫訪問進行的。我有一套類,它包裹每個進入或去往數據庫的數據對象。這些自動在用戶界面中提供用戶反饋,異步操作以及錯誤記錄和處理。
我希望這可以幫助你,我沒有誤解你的問題。
UPDATE >>>
Oooops,我忘了說最重要的部分...我有一個MainViewModel
類,它擴展BaseViewModel
並顯示在MainWindow.xaml
。在這個視圖模型,有BaseViewModel
類型的公共屬性:
public BaseViewModel ViewModel
{
get { return viewModel; }
set
{
if (viewModel != value)
{
viewModel = value;
NotifyPropertyChanged("ViewModel");
}
}
}
我可以將此屬性設置爲已擴展BaseViewModel
類中的任何視圖模型類。在MainWindow.xaml
,我具有以下設置:
...
<Grid Grid.Row="1" Background="{StaticResource Windows7LightBackground}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl Grid.RowSpan="2" Content="{Binding ViewModel}" Margin="5" />
</Grid>
<Controls:FeedbackControl Grid.Row="0" Feedback="{Binding FeedbackManager.Feedback}"
VerticalAlignment="Top" HorizontalAlignment="Stretch" MaxWidth="750"
Margin="100,22,100,0" />
...
在第一Grid
行,我有一個Ribbon
的控制,在第二I具有ContentControl
,它顯示的是在ViewModel
設置視圖模型相匹配的視圖財產,然後我有一個自定義FeedbackControl
,當反饋到達時,滑入和滑出視圖。
這個難題的最後一部分是將視圖與視圖模型鏈接起來。
...
<DataTemplate DataType="{x:Type ViewModels:HomeViewModel}">
<Views:HomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:MainViewModel}">
<Views:MainView />
</DataTemplate>
...
目前尚不清楚在這裏你的問題是什麼:這是使用
DataTemplate
對象在App.xaml
文件來完成。反射和屬性從哪裏來? –對不起,我編輯了這個問題。我有例如一些命令,我想在項目中指定它們 – Tobias
那麼如果你想在框架中有一個虛擬機實現你必須考慮,爲什麼你想把它放在那裏。你的'MainViewModel'有什麼特別之處?你是否需要在其他項目中使用相同的實現? – DHN