129 lines
7.2 KiB
Markdown
129 lines
7.2 KiB
Markdown
|
|
---
|
|||
|
|
source_files:
|
|||
|
|
- DataPRO/Modules/SystemSettings/UISettings/ViewModel/ISOSettingsViewModel.cs
|
|||
|
|
generated_at: "2026-04-16T04:41:03.637144+00:00"
|
|||
|
|
model: "Qwen/Qwen3-Coder-Next-FP8"
|
|||
|
|
schema_version: 1
|
|||
|
|
sha256: "38bf1bb83bea5e37"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ViewModel
|
|||
|
|
|
|||
|
|
## Documentation: `UISettingsViewModel`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 1. **Purpose**
|
|||
|
|
|
|||
|
|
`UISettingsViewModel` is the view model for the UI Settings module, responsible for managing UI-related state and mediating interactions between the view (`IUISettingsView`) and the broader application infrastructure (e.g., event aggregation, region management, dependency injection). It implements the `IUISettingsViewModel` interface and is exported as a shared singleton via MEF (`[Export(typeof(IUISettingsView))]`). Its primary role is to expose properties that control UI layout (e.g., `IsMenuIncluded`, `IsNavigationIncluded`) and to translate application-level events (`RaiseNotification`, `BusyIndicatorChangeNotification`) into Prism `InteractionRequest` triggers for UI notifications and busy indicators.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. **Public Interface**
|
|||
|
|
|
|||
|
|
#### `class UISettingsViewModel : BasePropertyChanged, IUISettingsViewModel`
|
|||
|
|
|
|||
|
|
- **Constructor**
|
|||
|
|
```csharp
|
|||
|
|
public UISettingsViewModel(IUISettingsView view, IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)
|
|||
|
|
```
|
|||
|
|
Initializes the view model with required dependencies, sets `View.DataContext = this`, registers event handlers for `RaiseNotification` and `BusyIndicatorChangeNotification` events, and initializes `NotificationRequest` and `ConfirmationRequest`.
|
|||
|
|
|
|||
|
|
- **`void Cleanup()`**
|
|||
|
|
No-op stub. Intended for cleanup logic but currently does nothing.
|
|||
|
|
|
|||
|
|
- **`Task CleanupAsync()`**
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub for async cleanup.
|
|||
|
|
|
|||
|
|
- **`void Initialize()`**
|
|||
|
|
No-op stub.
|
|||
|
|
|
|||
|
|
- **`void Initialize(object parameter)`**
|
|||
|
|
No-op stub.
|
|||
|
|
|
|||
|
|
- **`void Initialize(object parameter, object model)`**
|
|||
|
|
No-op stub.
|
|||
|
|
|
|||
|
|
- **`Task InitializeAsync()`**
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub.
|
|||
|
|
|
|||
|
|
- **`Task InitializeAsync(object parameter)`**
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub.
|
|||
|
|
|
|||
|
|
- **`void Activated()`**
|
|||
|
|
No-op stub.
|
|||
|
|
|
|||
|
|
#### Properties
|
|||
|
|
|
|||
|
|
- **`IUISettingsView View { get; }`**
|
|||
|
|
Reference to the associated view instance. Set during construction.
|
|||
|
|
|
|||
|
|
- **`InteractionRequest<Notification> NotificationRequest { get; }`**
|
|||
|
|
Prism `InteractionRequest` used to trigger notification popups (e.g., informational messages).
|
|||
|
|
|
|||
|
|
- **`InteractionRequest<Confirmation> ConfirmationRequest { get; }`**
|
|||
|
|
Prism `InteractionRequest` for confirmation dialogs (declared but *not used* in current implementation).
|
|||
|
|
|
|||
|
|
- **`bool IsDirty { get; }`**
|
|||
|
|
Read-only property; always `false` (never set). Intended for tracking unsaved changes.
|
|||
|
|
|
|||
|
|
- **`bool IsBusy { get; set; }`**
|
|||
|
|
Bindable property reflecting busy state. Set via `OnBusyIndicatorNotification(bool)` in response to `BusyIndicatorChangeNotification` events.
|
|||
|
|
|
|||
|
|
- **`bool IsMenuIncluded { get; set; }`**
|
|||
|
|
Bindable property indicating whether the menu UI element should be included. Defaults to `false`.
|
|||
|
|
|
|||
|
|
- **`bool IsNavigationIncluded { get; set; }`**
|
|||
|
|
Bindable property indicating whether the navigation UI element should be included. Defaults to `false`.
|
|||
|
|
|
|||
|
|
- **`string HeaderInfo { get; }`**
|
|||
|
|
Returns the constant `"MainRegion"`. Used as a header identifier (purpose unclear without further context).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. **Invariants**
|
|||
|
|
|
|||
|
|
- `View.DataContext` is always set to `this` during construction.
|
|||
|
|
- `IsBusy` is updated *only* in response to `BusyIndicatorChangeNotification` events (via `OnBusyIndicatorNotification`).
|
|||
|
|
- `NotificationRequest` is triggered *only* via `OnRaiseNotification`, which wraps `NotificationContentEventArgs` into a `Notification` object with an empty `Message` and `Title` fields in the inner `NotificationContentEventArgs` (see `Gotchas`).
|
|||
|
|
- `IsDirty` is never set to `true`; its value is always `false`.
|
|||
|
|
- `IsMenuIncluded` and `IsNavigationIncluded` default to `false` and are mutable via property setters.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. **Dependencies**
|
|||
|
|
|
|||
|
|
#### Imports / Dependencies
|
|||
|
|
- **Prism**: `IEventAggregator`, `IRegionManager`, `InteractionRequest<T>`, `Notification`, `Confirmation`.
|
|||
|
|
- **Unity**: `IUnityContainer`.
|
|||
|
|
- **DTS Common Libraries**:
|
|||
|
|
- `DTS.Common.Base.BasePropertyChanged` (base class for property change notifications).
|
|||
|
|
- `DTS.Common.Events.RaiseNotification`, `BusyIndicatorChangeNotification` (event types).
|
|||
|
|
- `DTS.Common.Interactivity.NotificationContentEventArgs`, `NotificationContentEventArgsWithoutTitle` (used in event handling).
|
|||
|
|
- `DTS.Common.Interface.IUISettingsView`, `IUISettingsViewModel` (view/view model interfaces).
|
|||
|
|
- **MEF**: `[Export]` and `[PartCreationPolicy(CreationPolicy.Shared)]` indicate integration with a MEF-based composition container.
|
|||
|
|
|
|||
|
|
#### Depends On
|
|||
|
|
- `IUISettingsView` (the view it binds to).
|
|||
|
|
- `RaiseNotification` and `BusyIndicatorChangeNotification` events (published externally).
|
|||
|
|
- `NotificationContentEventArgs` and `NotificationContentEventArgsWithoutTitle` types (used in event handling logic).
|
|||
|
|
|
|||
|
|
#### Consumed By
|
|||
|
|
- The application shell or main region manager (via `IRegionManager`) to host this view model’s view.
|
|||
|
|
- Any module/component that publishes `RaiseNotification` or `BusyIndicatorChangeNotification` events.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5. **Gotchas**
|
|||
|
|
|
|||
|
|
- **`NotificationContentEventArgsWithoutTitle` is referenced in comments but not defined in source**: The comment in `OnRaiseNotification` mentions `NotificationContentEventArgsWithoutTitle`, but this type is not imported or used in the code. This suggests either:
|
|||
|
|
- A mismatch between documentation and implementation, or
|
|||
|
|
- A missing type definition (potential compile-time error if not defined elsewhere).
|
|||
|
|
- **`NotificationRequest` uses a modified `NotificationContentEventArgs`**: In `OnRaiseNotification`, a new `NotificationContentEventArgs` is constructed with empty strings for `Title` and `Message` fields (`new NotificationContentEventArgs(eventArgsWithTitle.Message, "", eventArgsWithTitle.Image, "")`). This contradicts the comment that says it expects a `NotificationContentEventArgsWithoutTitle` object. Likely indicates legacy or incomplete refactoring.
|
|||
|
|
- **`ConfirmationRequest` is declared but never used**: No code raises `ConfirmationRequest`, suggesting it is unused or reserved for future use.
|
|||
|
|
- **`IsDirty` is never updated**: Despite being a public property, it is never set to `true`, making it effectively inert. This may indicate incomplete implementation or a design oversight.
|
|||
|
|
- **`HeaderInfo` returns a hardcoded `"MainRegion"`**: Its purpose is unclear; it may be a remnant of region naming conventions but is not used in the current code.
|
|||
|
|
- **`Initialize*` and `Cleanup*` methods are no-ops**: All overloads are stubbed. If the module expects initialization logic (e.g., loading settings), it is not implemented here.
|
|||
|
|
- **Thread context for `BusyIndicatorChangeNotification`**: The subscription uses `ThreadOption.PublisherThread`, meaning the handler runs on the publisher’s thread. If publishers are non-UI threads, this could cause cross-thread UI exceptions unless `SetProperty` (from `BasePropertyChanged`) is thread-safe.
|
|||
|
|
|
|||
|
|
> **Note**: No usage of `UnityContainer`, `_regionManager`, or `_eventAggregator` beyond initialization and event subscription is present. Their purpose is unclear in the current implementation.
|