15 KiB
source_files, generated_at, model, schema_version, sha256
| source_files | generated_at | model | schema_version | sha256 | |||
|---|---|---|---|---|---|---|---|
|
2026-04-16T11:26:44.035903+00:00 | zai-org/GLM-5-FP8 | 1 | ab73d8a45f8ea2f6 |
DTS Viewer Main Module ViewModels Documentation
1. Purpose
This module contains the core ViewModel classes for the DTS Viewer application's main shell and primary views. It implements the MVVM pattern using Microsoft Prism and Unity IoC container. The module orchestrates region management, event aggregation for cross-component communication, and view composition for the main application shell, standard viewer mode, and export-focused mode. The ViewModels serve as the presentation logic layer, binding views to data, handling user interactions via commands, and coordinating child view instantiation within named UI regions.
2. Public Interface
ViewerShellViewModel
Location: DTS.Viewer.Modules.Main.ViewModel
Class Declaration:
[Export(typeof(IShellView))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class ViewerShellViewModel : NotificationObject, IViewerShellViewModel
Constructor:
public ViewerShellViewModel(IViewerShellView view, IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)
Initializes the shell view model, sets the View's DataContext, creates interaction requests, subscribes to RaiseNotification events, and registers IMainView/MainView and IMainViewModel/MainViewModel with the Unity container.
Properties:
| Property | Type | Description |
|---|---|---|
View |
IViewerShellView |
Gets the associated shell view |
NotificationRequest |
InteractionRequest<Notification> |
Interaction request for notification dialogs |
ConfirmationRequest |
InteractionRequest<Confirmation> |
Interaction request for confirmation dialogs |
ContextMainRegion |
Object |
Gets/sets the content of the MainRegion |
IsMenuIncluded |
bool |
Indicates whether menu is included |
IsNavigationIncluded |
bool |
Indicates whether navigation is included |
HeaderInfo |
string |
Returns "MainRegion" |
IsBusy |
bool |
Throws NotImplementedException |
IsDirty |
bool |
Throws NotImplementedException |
Methods:
| Method | Signature | Description |
|---|---|---|
Initialize |
void Initialize() |
Stub implementation (sets local i = 10) |
Initialize |
void Initialize(object parameter) |
Stub implementation (sets local i = 22) |
Initialize |
void Initialize(object parameter, object model) |
Empty stub |
Activated |
void Activated() |
Empty stub |
Cleanup |
void Cleanup() |
Throws NotImplementedException |
CleanupAsync |
Task CleanupAsync() |
Throws NotImplementedException |
InitializeAsync |
Task InitializeAsync() |
Throws NotImplementedException |
InitializeAsync |
Task InitializeAsync(object parameter) |
Throws NotImplementedException |
GetRegions |
List<FrameworkElement> GetRegions() |
Returns all elements named "Region" in the MainShell |
OnRaiseNotification |
void OnRaiseNotification(NotificationContentEventArgs eventArgsWithTitle) |
Private handler that raises NotificationRequest with transformed args |
MainViewModel
Location: DTS.Viewer.Modules.Main.ViewModel
Class Declaration:
public class MainViewModel : BaseViewModel<IMainViewModel>, IMainViewModel
Constructor:
public MainViewModel(IMainView view, IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)
Initializes the view model, sets DataContext, creates interaction requests, and subscribes to RaiseNotification event.
Methods:
| Method | Signature | Description |
|---|---|---|
Initialize |
override void Initialize() |
Empty override |
Initialize |
override void Initialize(object parameter) |
Sets Parent, propagates menu/navigation flags, subscribes to AssemblyListNotification and BusyIndicatorChangeNotification events |
Activated |
override void Activated() |
Empty override |
GetRegions |
List<FrameworkElement> GetRegions() |
Returns all elements named "Region" in MainShell |
Private Methods:
| Method | Description |
|---|---|
OnAssemblyListChange(AssemblyListInfo e) |
Processes assembly custom attributes ending with "ImageAttribute", creates AssemblyNameImage objects, and populates regions based on eAssemblyRegion enum |
OnRaiseNotification(NotificationContentEventArgs) |
Raises NotificationRequest with transformed content |
OnBusyIndicatorNotification(bool eventArg) |
Sets IsBusy property |
GetNavigationView(IBaseViewModel) |
Resolves and initializes INavigationView/INavigationViewModel |
GetPropertyView(IBaseWindowModel) |
Resolves and initializes IPropertyView/IPropertyViewModel |
GetGraphView(IBaseWindowModel) |
Resolves and initializes IGraphView/IGraphViewModel |
Region Context Properties:
| Property | Region Name |
|---|---|
ContextNavigationRegion |
NavigationRegion |
ContextGraphRegion |
GraphRegion |
ContextTestsRegion |
TestsRegion |
ContextGraphsRegion |
GraphsRegion |
ContextLegendRegion |
LegendRegion |
ContextDiagRegion |
DiagRegion |
ContextStatsRegion |
StatsRegion |
ContextCursorRegion |
CursorRegion |
ContextPropertyRegion |
PropertyRegion |
Properties:
| Property | Type | Description |
|---|---|---|
View |
IBaseView |
The associated view |
IsBusy |
bool |
Busy indicator state |
IsBusyMessage |
string |
Message for busy indicator |
IsMenuIncluded |
bool |
Menu inclusion flag |
IsNavigationIncluded |
bool |
Navigation inclusion flag |
HeaderInfo |
string |
Returns "MainRegion" |
ExportMainViewModel
Location: DTS.Viewer.Modules.Main.ViewModel
Class Declaration:
public class ExportMainViewModel : BaseViewModel<IExportMainViewModel>, IExportMainViewModel
Constructor:
public ExportMainViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)
Initializes interaction requests, resolves IExportMainViewGrid as the View, and sets DataContext.
Key Properties:
| Property | Type | Description |
|---|---|---|
View |
IBaseView |
Gets/sets the view (resolved as IExportMainViewGrid) |
Standalone |
bool |
Determines whether to use ExportMainView or ExportMainViewGrid |
SelectedTest |
string |
Currently selected test |
SelectedDTSFile |
string |
Currently selected DTS file |
SelectedEventList |
List<ITestEvent> |
List of selected test events |
AvailableTestIds |
List<string> |
Available test IDs |
SettingsVisibility |
Visibility |
Controls settings panel visibility |
ActiveContent |
IBaseViewModel |
Currently active content |
TotalSelectedTests |
int |
Count of selected tests |
TotalLoadedTests |
int |
Count of loaded tests |
TotalSelectedGraphs |
int |
Count of selected graphs |
TotalLoadedGraphs |
int |
Count of loaded graphs |
SelectedDataFolder |
string |
Selected data folder path |
SelectedDataFile |
string |
Selected data file |
ShowModifications |
bool |
Indicates if modifications should be shown |
ChannelCodeViewMode |
IsoViewMode |
Channel code display mode (default: IsoViewMode.ISOAndUserCode) |
CalibrationBehaviorSetting |
CalibrationBehaviors |
Calibration behavior (default: CalibrationBehaviors.NonLinearIfAvailable) |
CalibrationBehaviorSettableInViewer |
bool |
Whether calibration behavior is settable (default: true) |
DoesUserHaveEditPermission |
bool |
User edit permission flag (default: false) |
ConfigPath |
string |
Configuration path |
IsBusy |
bool |
Busy indicator state |
IsBusyMessage |
string |
Busy indicator message |
IsMenuIncluded |
bool |
Menu inclusion flag |
IsNavigationIncluded |
bool |
Navigation inclusion flag |
HeaderInfo |
string |
Returns "MainRegion" |
Commands:
| Command | CanExecute Condition | Action |
|---|---|---|
LoadLayoutCommand |
File.Exists(@".\DataProViewerAvalonDock.config") |
Deserializes AvalonDock layout from config file |
SaveLayoutCommand |
Always true |
Serializes AvalonDock layout to .\AvalonDock.config |
Public Methods:
| Method | Signature | Description |
|---|---|---|
Initialize |
override void Initialize() |
Calls Subscribe() to register event handlers |
Initialize |
override void Initialize(object parameter) |
Sets Parent, propagates flags, calls Subscribe() |
Activated |
override void Activated() |
Empty override |
AddSelectedEvents |
void AddSelectedEvents(string groupName, List<ITestEvent> events) |
Adds events to SelectedEventList, publishes busy indicator events |
SelectAndIncludeDataFile |
void SelectAndIncludeDataFile(string value) |
Sets selected data file and publishes DataFolderChangedEvent |
ZoomReset |
void ZoomReset() |
Publishes ResetZoomChangedEvent with true |
LeftKeyPress |
void LeftKeyPress() |
Publishes ShiftT0Event with -1 step |
RightKeyPress |
void RightKeyPress() |
Publishes ShiftT0Event with +1 step |
GetRegions |
List<FrameworkElement> GetRegions() |
Returns regions based on Standalone mode |
Private Event Handlers:
| Method | Event Subscribed |
|---|---|
OnDataFileSelected |
DataFileSelectedEvent |
OnViewerSettingsVisibilityChanged |
ViewerSettingsVisibilityChangedEvent |
OnGraphLoadedCountChanged |
GraphLoadedCountNotification |
OnGraphSelectedCountChanged |
GraphSelectedEventCountNotification |
OnGraphChannelsReadCompleted |
GraphChannelsReadCompletedNotification (UIThread) |
OnTestLoadedChanged |
TestLoadedCountNotification |
OnTestSelectedCountChanged |
TestSummaryCountNotification |
OnLoadExportModule |
LoadExportModuleEvent |
OnShiftT0Event |
ShiftT0Event |
OnSaveToPDFRequested |
SaveToPDFRequestedEvent |
View Factory Methods:
| Method | Returns |
|---|---|
GetGraphView(IBaseViewModel) |
IGraphView with initialized IGraphViewModel |
GetGraphListView(IBaseViewModel) |
IExportGraphMainView with initialized IExportGraphMainViewModel |
GetTestDefinitionView(IBaseViewModel) |
ITestSummaryListView with initialized ITestSummaryListViewModel |
3. Invariants
-
View-ViewModel Binding: Each ViewModel sets
View.DataContext = thisin its constructor, establishing the binding invariant. -
Region Content Access: All
ContextXxxRegionproperties cast theViewto a concrete type (MainView,ViewerShellView,ExportMainView, orExportMainViewGrid) before accessing region content. The view must be of the expected type. -
Parent Parameter Type: In
MainViewModel.Initialize(object parameter)andExportMainViewModel.Initialize(object parameter), the parameter is cast toIBaseWindowModelwithout type checking. -
Standalone Mode Switching:
ExportMainViewModelrequiresStandaloneto be set correctly before accessing region properties, as it determines whether to cast toExportMainVieworExportMainViewGrid. -
Event Subscription Pattern: ViewModels subscribe to events in constructors or
Initializemethods; unsubscribing is not visible in the source. -
Property Change Notification: All setters that modify bound properties call
OnPropertyChanged(string)with the property name. -
Unity Container Registration:
ViewerShellViewModelregistersIMainViewModelwithContainerControlledLifetimeManager, making it a singleton.
4. Dependencies
External Dependencies (from imports):
Microsoft.Practices.Prism.Events-IEventAggregator,ThreadOptionMicrosoft.Practices.Prism.Interactivity.InteractionRequest-InteractionRequest<T>,Notification,ConfirmationMicrosoft.Practices.Prism.Regions-IRegionManagerMicrosoft.Practices.Prism.ViewModel-NotificationObjectMicrosoft.Practices.Unity-IUnityContainer,ContainerControlledLifetimeManagerSystem.ComponentModel.Composition-[Export],[PartCreationPolicy],CreationPolicyXceed.Wpf.AvalonDock.Layout.Serialization-XmlLayoutSerializer(ExportMainViewModel only)Prism.Events- Used in ExportMainViewModel alongside older Prism namespacePrism.Regions- Used in ExportMainViewModel alongside older Prism namespaceUnity- Used in ExportMainViewModel alongside older Unity namespace
Internal Dependencies:
DTS.Common.Base-BaseViewModel<T>,IBaseViewModel,IBaseView,IBaseWindowModelDTS.Common.Events- Event types:RaiseNotification,AssemblyListNotification,BusyIndicatorChangeNotification,DataFolderChangedEvent,LoadExportModuleEvent,TestLoadedCountNotification,TestSummaryCountNotification,GraphLoadedCountNotification,ShiftT0Event,GraphSelectedEventCountNotification,GraphChannelsReadCompletedNotification,ViewerSettingsVisibilityChangedEvent,DataFileSelectedEvent,SaveToPDFRequestedEvent,ChannelCodesViewChangedEvent,ExportCalibrationBehaviorSettingChangedEvent,CalibrationBehaviorSettableInViewerChangedEvent,ResetZoomChangedEvent,PageErrorEventDTS.Common.Interface- Various view/viewmodel interfaces:IMainView,IMainViewModel,IViewerShellView,IViewerShellViewModel,INavigationView,INavigationViewModel,IPropertyView,IPropertyViewModel,IGraphView,IGraphViewModel,IExportMainViewGrid,IExportMainViewModel,IExportGraphMainView,IExportGraphMainViewModel,ITestSummaryListView,ITestSummaryListViewModel,ITestEventDTS.Common.Utils-Utils.GetChildrenByName()DTS.Common.Enums-eAssemblyRegionDTS.Common.Enums.Sensors-IsoViewMode,CalibrationBehaviorsDTS.Common.Classes.Viewer.Commands-RelayCommandDTS.Common.Interactivity- (imported but usage unclear)DTS.Viewer.Resources-StringResources
View Dependencies (referenced but not provided):
ViewerShellView,MainView,ExportMainView,ExportMainViewGrid
5. Gotchas
-
NotImplementedException Throwing Members:
ViewerShellViewModelhas multiple members that throwNotImplementedException:IsBusygetterIsDirtygetterCleanup()CleanupAsync()InitializeAsync()InitializeAsync(object parameter)
These appear to be interface implementations that were never completed. Calling code must avoid these.
-
Unused Local Variables:
ViewerShellViewModel.Initialize()methods set localint ivariables that are never used—likely debug stubs. -
Duplicate DataContext Assignment:
ExportMainViewModelconstructor setsView.DataContext = thistwice