122 lines
6.5 KiB
Markdown
122 lines
6.5 KiB
Markdown
|
|
---
|
|||
|
|
source_files:
|
|||
|
|
- DataPRO/Modules/TestSetups/Diagnostics/ViewModel/DiagnosticsViewModel.cs
|
|||
|
|
generated_at: "2026-04-16T04:50:48.729446+00:00"
|
|||
|
|
model: "Qwen/Qwen3-Coder-Next-FP8"
|
|||
|
|
schema_version: 1
|
|||
|
|
sha256: "ea1f4ae58f807074"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ViewModel
|
|||
|
|
|
|||
|
|
## Documentation: `DiagnosticsViewModel`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1. **Purpose**
|
|||
|
|
|
|||
|
|
The `DiagnosticsViewModel` class serves as the view model for the Diagnostics module within the application’s UI, implementing the `IDiagnosticsViewModel` interface. It acts as the intermediary between the diagnostics view (`IDiagnosticsTreeView`) and underlying system services (e.g., event aggregation, region management, dependency injection), enabling UI interaction patterns such as notifications and busy-state indication. It subscribes to global events (`RaiseNotification`, `BusyIndicatorChangeNotification`) to synchronize UI state (e.g., `IsBusy`, `IsMenuIncluded`) and trigger interactive popups via Prism’s `InteractionRequest` mechanism. Though currently minimal in logic, it provides the foundational structure for future diagnostics functionality.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. **Public Interface**
|
|||
|
|
|
|||
|
|
#### `public IDiagnosticsTreeView View { get; set; }`
|
|||
|
|
*Alias:* `TreeView` (see below).
|
|||
|
|
The view instance bound to this view model. Set during construction and used to establish data context.
|
|||
|
|
|
|||
|
|
#### `public IDiagnosticsTreeView TreeView { get; set; }`
|
|||
|
|
Explicitly named property (redundant with `View`). Holds the reference to the diagnostics tree view.
|
|||
|
|
|
|||
|
|
#### `public bool IsDirty { get; private set; }`
|
|||
|
|
Read-only property indicating whether the view model’s state has unsaved changes. Currently never set to `true` in the source.
|
|||
|
|
|
|||
|
|
#### `public bool IsBusy { get; set; }`
|
|||
|
|
Public property that reflects whether a long-running operation is in progress. Raises `PropertyChanged` when changed.
|
|||
|
|
|
|||
|
|
#### `public bool IsMenuIncluded { get; set; }`
|
|||
|
|
Controls whether the menu UI element should be rendered. Raises `PropertyChanged` on change.
|
|||
|
|
|
|||
|
|
#### `public bool IsNavigationIncluded { get; set; }`
|
|||
|
|
Controls whether the navigation UI element should be rendered. Raises `PropertyChanged` on change.
|
|||
|
|
|
|||
|
|
#### `public event PropertyChangedEventHandler PropertyChanged`
|
|||
|
|
Standard `INotifyPropertyChanged` implementation. Used by `OnPropertyChanged`.
|
|||
|
|
|
|||
|
|
#### `public void OnPropertyChanged(string propertyName)`
|
|||
|
|
Raises the `PropertyChanged` event for the specified property name.
|
|||
|
|
|
|||
|
|
#### `public InteractionRequest<Notification> NotificationRequest { get; }`
|
|||
|
|
Prism interaction request used to trigger notification popups (e.g., alerts, messages). Raised via `OnRaiseNotification`.
|
|||
|
|
|
|||
|
|
#### `public InteractionRequest<Confirmation> ConfirmationRequest { get; }`
|
|||
|
|
Prism interaction request for confirmation dialogs (currently unused in the source).
|
|||
|
|
|
|||
|
|
#### `public void Unset()`
|
|||
|
|
No-op stub. Intended for cleanup before view model is detached.
|
|||
|
|
|
|||
|
|
#### `public void Cleanup()`
|
|||
|
|
No-op stub. Intended for synchronous cleanup.
|
|||
|
|
|
|||
|
|
#### `public Task CleanupAsync()`
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub for asynchronous cleanup.
|
|||
|
|
|
|||
|
|
#### `public void Initialize()`
|
|||
|
|
No-op stub. Part of Prism’s `INavigationAware` / `IInitialize` pattern.
|
|||
|
|
|
|||
|
|
#### `public void Initialize(object parameter)`
|
|||
|
|
No-op stub.
|
|||
|
|
|
|||
|
|
#### `public void Initialize(object parameter, object model)`
|
|||
|
|
No-op stub.
|
|||
|
|
|
|||
|
|
#### `public Task InitializeAsync()`
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub.
|
|||
|
|
|
|||
|
|
#### `public Task InitializeAsync(object parameter)`
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub.
|
|||
|
|
|
|||
|
|
#### `public void Activated()`
|
|||
|
|
No-op stub. Likely part of Prism’s `INavigationAware` or region lifecycle.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. **Invariants**
|
|||
|
|
|
|||
|
|
- `TreeView` must be non-null after construction (set in constructor).
|
|||
|
|
- `IsBusy` must be set only via its property setter (which triggers `OnPropertyChanged("IsBusy")`).
|
|||
|
|
- `IsMenuIncluded` and `IsNavigationIncluded` must be set only via their property setters (which trigger `OnPropertyChanged`).
|
|||
|
|
- `NotificationRequest` and `ConfirmationRequest` are initialized exactly once in the constructor.
|
|||
|
|
- Event subscriptions (`RaiseNotification`, `BusyIndicatorChangeNotification`) are established in the constructor and never unsubscribed (potential memory leak risk).
|
|||
|
|
- `OnRaiseNotification` constructs a *new* `NotificationContentEventArgs` with empty strings for `Header` and `Footer`, preserving only `Message`, `Image`, and `Title`.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. **Dependencies**
|
|||
|
|
|
|||
|
|
#### **Imports / Dependencies Used**
|
|||
|
|
- `DTS.Common.Events` → Provides `RaiseNotification`, `BusyIndicatorChangeNotification`, and `NotificationContentEventArgs`.
|
|||
|
|
- `DTS.Common.Interface.TestSetups.Diagnostics` → Defines `IDiagnosticsTreeView` and `IDiagnosticsViewModel`.
|
|||
|
|
- `Prism.Events` → Provides `IEventAggregator`, `EventAggregator`, and event types.
|
|||
|
|
- `Prism.Regions` → Provides `IRegionManager`.
|
|||
|
|
- `Unity` → Provides `IUnityContainer`.
|
|||
|
|
- `System.ComponentModel`, `System.Threading.Tasks` → Standard .NET interfaces and async support.
|
|||
|
|
|
|||
|
|
#### **Consumers (Inferred)**
|
|||
|
|
- The view (`IDiagnosticsTreeView`) binds to this view model (via `TreeView.DataContext = this`).
|
|||
|
|
- External components publish `RaiseNotification` and `BusyIndicatorChangeNotification` events via `IEventAggregator`, which this view model consumes.
|
|||
|
|
- Likely registered as a singleton (`[PartCreationPolicy(CreationPolicy.Shared)]`) and injected via Unity.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5. **Gotchas**
|
|||
|
|
|
|||
|
|
- **No-op lifecycle methods**: All `Initialize*`, `Cleanup*`, and `Activated` methods are empty stubs. Behavior is not implemented despite being part of Prism’s expected patterns.
|
|||
|
|
- **Event subscription leak**: Subscriptions to `_eventAggregator.GetEvent<...>().Subscribe(...)` are not disposed or unsubscribed. If the view model is long-lived or recreated frequently, this may cause memory leaks or duplicate handlers.
|
|||
|
|
- **Redundant `View` and `TreeView` properties**: Both `View` and `TreeView` are exposed and refer to the same object. This duplication is confusing and suggests possible refactoring debt.
|
|||
|
|
- **Unused `ConfirmationRequest`**: Declared but never used. May indicate incomplete implementation.
|
|||
|
|
- **`IsDirty` never set to `true`**: The property exists but is never updated, rendering it non-functional.
|
|||
|
|
- **`OnRaiseNotification` mutates event args**: A new `NotificationContentEventArgs` is created with empty `Header` and `Footer`, discarding original values. This may be intentional (e.g., to sanitize content), but is not documented.
|
|||
|
|
- **No command bindings**: The `#region Commands` section is empty. If commands are expected (e.g., for button clicks), they are not implemented here.
|
|||
|
|
|
|||
|
|
> **None identified from source alone** for *behavioral correctness* beyond the above.
|