163 lines
7.5 KiB
Markdown
163 lines
7.5 KiB
Markdown
|
|
---
|
|||
|
|
source_files:
|
|||
|
|
- DataPRO/Modules/SystemSettings/PowerAndBattery/ViewModel/PowerAndBatteryViewModel.cs
|
|||
|
|
generated_at: "2026-04-16T04:41:22.608181+00:00"
|
|||
|
|
model: "Qwen/Qwen3-Coder-Next-FP8"
|
|||
|
|
schema_version: 1
|
|||
|
|
sha256: "734fcb6778e8ee9f"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ViewModel
|
|||
|
|
|
|||
|
|
## Documentation: PowerAndBatteryViewModel
|
|||
|
|
|
|||
|
|
### 1. Purpose
|
|||
|
|
The `PowerAndBatteryViewModel` serves as the view model for the Power and Battery settings module within the application’s UI. It acts as the intermediary between the `IPowerAndBatteryView` and underlying system services (e.g., event aggregation, region navigation, dependency injection), enabling reactive UI behavior through Prism’s interaction patterns (e.g., notifications, busy indicators). It subscribes to global events (`RaiseNotification`, `BusyIndicatorChangeNotification`) to synchronize UI state (e.g., busy status, popup notifications) and exposes properties (`IsBusy`, `IsDirty`, `IsMenuIncluded`, etc.) that control view presentation. Though currently minimal in implementation, it is designed to support future power/battery-specific logic.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. Public Interface
|
|||
|
|
|
|||
|
|
#### `PowerAndBatteryViewModel` Constructor
|
|||
|
|
```csharp
|
|||
|
|
public PowerAndBatteryViewModel(
|
|||
|
|
IPowerAndBatteryView view,
|
|||
|
|
IRegionManager regionManager,
|
|||
|
|
IEventAggregator eventAggregator,
|
|||
|
|
IUnityContainer unityContainer)
|
|||
|
|
```
|
|||
|
|
Initializes the view model, assigns the provided `view` and sets its `DataContext` to `this`. Registers event subscriptions for `RaiseNotification` and `BusyIndicatorChangeNotification` events via `_eventAggregator`. Initializes `NotificationRequest` and `ConfirmationRequest` for Prism interaction patterns.
|
|||
|
|
|
|||
|
|
#### `Cleanup()`
|
|||
|
|
```csharp
|
|||
|
|
public void Cleanup()
|
|||
|
|
```
|
|||
|
|
No-op stub. Intended for cleanup logic (e.g., unsubscribing from events, releasing resources), but currently does nothing.
|
|||
|
|
|
|||
|
|
#### `CleanupAsync()`
|
|||
|
|
```csharp
|
|||
|
|
public Task CleanupAsync()
|
|||
|
|
```
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub for async cleanup.
|
|||
|
|
|
|||
|
|
#### `Initialize()`
|
|||
|
|
```csharp
|
|||
|
|
public void Initialize()
|
|||
|
|
```
|
|||
|
|
No-op stub. Intended for initialization logic.
|
|||
|
|
|
|||
|
|
#### `Initialize(object parameter)`
|
|||
|
|
```csharp
|
|||
|
|
public void Initialize(object parameter)
|
|||
|
|
```
|
|||
|
|
No-op stub. Intended for parameterized initialization.
|
|||
|
|
|
|||
|
|
#### `Initialize(object parameter, object model)`
|
|||
|
|
```csharp
|
|||
|
|
public void Initialize(object parameter, object model)
|
|||
|
|
```
|
|||
|
|
No-op stub. Intended for initialization with both navigation parameter and domain model.
|
|||
|
|
|
|||
|
|
#### `InitializeAsync()`
|
|||
|
|
```csharp
|
|||
|
|
public Task InitializeAsync()
|
|||
|
|
```
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub for async initialization.
|
|||
|
|
|
|||
|
|
#### `InitializeAsync(object parameter)`
|
|||
|
|
```csharp
|
|||
|
|
public Task InitializeAsync(object parameter)
|
|||
|
|
```
|
|||
|
|
Returns `Task.CompletedTask`. No-op stub for async parameterized initialization.
|
|||
|
|
|
|||
|
|
#### `Activated()`
|
|||
|
|
```csharp
|
|||
|
|
public void Activated()
|
|||
|
|
```
|
|||
|
|
No-op stub. Likely intended for Prism `INavigationAware.Activated` lifecycle hook.
|
|||
|
|
|
|||
|
|
#### `NotificationRequest`
|
|||
|
|
```csharp
|
|||
|
|
public InteractionRequest<Notification> NotificationRequest { get; }
|
|||
|
|
```
|
|||
|
|
Exposes a Prism `InteractionRequest` for triggering notification popups (e.g., informational messages). Triggered via `OnRaiseNotification`.
|
|||
|
|
|
|||
|
|
#### `ConfirmationRequest`
|
|||
|
|
```csharp
|
|||
|
|
public InteractionRequest<Confirmation> ConfirmationRequest { get; }
|
|||
|
|
```
|
|||
|
|
Exposes a Prism `InteractionRequest` for confirmation dialogs (e.g., yes/no prompts). Currently unused in the source.
|
|||
|
|
|
|||
|
|
#### `IsBusy`
|
|||
|
|
```csharp
|
|||
|
|
public bool IsBusy { get; set; }
|
|||
|
|
```
|
|||
|
|
Gets/sets the busy state. Bound to UI to show/hide a busy indicator. Set via `OnBusyIndicatorNotification`.
|
|||
|
|
|
|||
|
|
#### `IsDirty`
|
|||
|
|
```csharp
|
|||
|
|
public bool IsDirty { get; private set; }
|
|||
|
|
```
|
|||
|
|
Read-only property indicating whether the view model’s state has unsaved changes. Always `false` in current implementation.
|
|||
|
|
|
|||
|
|
#### `IsMenuIncluded`
|
|||
|
|
```csharp
|
|||
|
|
public bool IsMenuIncluded { get; set; }
|
|||
|
|
```
|
|||
|
|
Controls whether the main menu is visible in the view. Defaults to `false`.
|
|||
|
|
|
|||
|
|
#### `IsNavigationIncluded`
|
|||
|
|
```csharp
|
|||
|
|
public bool IsNavigationIncluded { get; set; }
|
|||
|
|
```
|
|||
|
|
Controls whether navigation controls are visible in the view. Defaults to `false`.
|
|||
|
|
|
|||
|
|
#### `HeaderInfo`
|
|||
|
|
```csharp
|
|||
|
|
public string HeaderInfo => "MainRegion";
|
|||
|
|
```
|
|||
|
|
Read-only property returning the literal string `"MainRegion"`. Likely used for view header identification or region targeting.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. Invariants
|
|||
|
|
- `View.DataContext` is always set to `this` during construction.
|
|||
|
|
- `IsBusy` is updated synchronously via `SetProperty` when `BusyIndicatorChangeNotification` is raised.
|
|||
|
|
- `NotificationRequest` is always initialized with a `Notification` object containing a `NotificationContentEventArgs` (with empty `OkText` and `CancelText`) and the original event’s `Title`.
|
|||
|
|
- The view model is a shared singleton (`[PartCreationPolicy(CreationPolicy.Shared)]`), meaning only one instance exists per application lifetime.
|
|||
|
|
- `IsDirty` is never set to `true` in the current implementation (always `false`).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. Dependencies
|
|||
|
|
|
|||
|
|
#### Dependencies *on* this module:
|
|||
|
|
- `IPowerAndBatteryView` (interface) — the view bound to this view model.
|
|||
|
|
- `IPowerAndBatteryViewModel` (interface) — the contract implemented by this class.
|
|||
|
|
- `PowerAndBattery` namespace — the module’s own namespace (inferred from `namespace PowerAndBattery`).
|
|||
|
|
|
|||
|
|
#### Dependencies *of* this module:
|
|||
|
|
- `DTS.Common.Base` — provides `BasePropertyChanged` (base class for property change notification).
|
|||
|
|
- `DTS.Common.Events` — provides `RaiseNotification`, `BusyIndicatorChangeNotification`, `NotificationContentEventArgs`.
|
|||
|
|
- `DTS.Common.Interactivity` — provides `InteractionRequest<T>` and related types (e.g., `Notification`, `Confirmation`).
|
|||
|
|
- `DTS.Common.Interface` — likely contains interfaces like `IPowerAndBatteryView`, `IPowerAndBatteryViewModel`.
|
|||
|
|
- `Prism.Events` — provides `IEventAggregator` and event types.
|
|||
|
|
- `Prism.Regions` — provides `IRegionManager`.
|
|||
|
|
- `Unity` — provides `IUnityContainer`.
|
|||
|
|
|
|||
|
|
#### Dependencies *of* this module’s consumers:
|
|||
|
|
- Any consumer must provide `IPowerAndBatteryView`, `IRegionManager`, `IEventAggregator`, and `IUnityContainer` via DI.
|
|||
|
|
- Consumers must publish `RaiseNotification` and `BusyIndicatorChangeNotification` events via `IEventAggregator` to interact with this view model.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5. Gotchas
|
|||
|
|
- **Empty `Cleanup()`/`Initialize()` implementations**: All lifecycle methods (`Cleanup`, `Initialize*`, `Activated`) are no-ops. This may indicate incomplete implementation or deferred logic.
|
|||
|
|
- **Unused `ConfirmationRequest`**: Declared but never raised; may be leftover from scaffolding or future use.
|
|||
|
|
- **`IsDirty` never updated**: Always `false`; if intended for dirty-state tracking, logic is missing.
|
|||
|
|
- **`HeaderInfo` is hardcoded**: Returns `"MainRegion"` literally — may be fragile if region names change.
|
|||
|
|
- **Event handler naming mismatch**: `OnBusyIndicatorNotification` is documented as handling `RaiseNotification` in its XML comment, but actually handles `BusyIndicatorChangeNotification`.
|
|||
|
|
- **`NotificationContentEventArgs` construction**: The `OnRaiseNotification` handler creates a new `NotificationContentEventArgs` with empty `OkText` and `CancelText` fields — this may be intentional (e.g., to suppress confirmation buttons) but is not documented.
|
|||
|
|
- **Thread safety**: `OnBusyIndicatorNotification` uses `ThreadOption.PublisherThread`, but `OnRaiseNotification` uses the default (likely background thread). If UI updates occur in `OnRaiseNotification`, this could cause cross-thread exceptions (though `NotificationRequest.Raise` likely marshals to UI thread).
|
|||
|
|
|
|||
|
|
None identified beyond the above.
|