106 lines
6.5 KiB
Markdown
106 lines
6.5 KiB
Markdown
---
|
||
source_files:
|
||
- DataPRO/Modules/StatusAndProgressBar/ViewModel/StatusAndProgressFooterViewModel.cs
|
||
- DataPRO/Modules/StatusAndProgressBar/ViewModel/StatusAndProgressBarViewModel.cs
|
||
generated_at: "2026-04-16T04:48:57.785641+00:00"
|
||
model: "Qwen/Qwen3-Coder-Next-FP8"
|
||
schema_version: 1
|
||
sha256: "8cccc53a0c9317e7"
|
||
---
|
||
|
||
# ViewModel
|
||
|
||
## Documentation: StatusAndProgressBar Module ViewModels
|
||
|
||
---
|
||
|
||
### 1. Purpose
|
||
This module provides shared UI state management for progress tracking and status reporting across the application. It exposes two distinct view models—`StatusAndProgressBarViewModel` (for main/status-bar contexts) and `StatusAndProgressFooterViewModel` (for footer-level progress)—that listen to `ProgressBarEvent` and `StatusAndProgressBarEvent` events respectively, and update corresponding UI properties (`ProgressText`, `ProgressBarValue`, `ProgressBarVisibility`, etc.). The module decouples progress producers from consumers via Prism’s `IEventAggregator`, enabling modular, event-driven progress updates without tight coupling.
|
||
|
||
---
|
||
|
||
### 2. Public Interface
|
||
|
||
#### `StatusAndProgressFooterViewModel`
|
||
- **`StatusAndProgressFooterViewModel(IStatusAndProgressFooterView view, IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)`**
|
||
Constructor. Initializes view binding, sets up `NotificationRequest` and `ConfirmationRequest` interaction triggers, and subscribes to `ProgressBarEvent` with handler `OnStatusAndProgressBarEvent`.
|
||
- **`Visibility ProgressBarVisiblity { get; set; }`**
|
||
Binds to the visibility of the progress bar in the footer view. *Note: Property name contains a typo (`Visiblity` instead of `Visibility`).*
|
||
- **`int ProgressBarValue { get; set; }`**
|
||
Current progress percentage (0–100).
|
||
- **`string ProgressText { get; set; }`**
|
||
Human-readable status text (e.g., `"Saving changes..."`).
|
||
|
||
#### `StatusAndProgressBarViewModel`
|
||
- **`StatusAndProgressBarViewModel(IStatusAndProgressBarView view, IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)`**
|
||
Constructor. Binds view to view model, subscribes to `StatusAndProgressBarEvent` (with `ThreadOption.PublisherThread`), and initializes `_searchButtonVisability = false`.
|
||
- **`override void Initialize(object parameter)`**
|
||
Overrides base initialization. Stores `parameter` as `Parent` and subscribes to `ProgressBarEvent` (with `ThreadOption.UIThread`).
|
||
- **`string AggregateStatusText { get; set; }`**
|
||
Combined status text (e.g., `"Processing"`, or `"Processing - Error occurred"` if `ErrorText` is present).
|
||
- **`Color AggregateStatusColor { get; set; }`**
|
||
Status color (e.g., `Colors.AliceBlue` by default).
|
||
- **`Visibility ProgressBarVisibility { get; set; }`**
|
||
Visibility of the main progress bar.
|
||
- **`int ProgressBarValue { get; set; }`**
|
||
Current progress percentage (0–100).
|
||
- **`bool SearchButtonVisability { get; set; }`**
|
||
Controls visibility of a search button (note: typo in property name; *should be `SearchButtonVisibility`*).
|
||
- **`Visibility AlertVisibility { get; set; }`**
|
||
Controls visibility of an alert indicator (default `Visibility.Hidden`).
|
||
|
||
---
|
||
|
||
### 3. Invariants
|
||
|
||
- **Event Filtering by Name/Requester**:
|
||
- `StatusAndProgressFooterViewModel.OnStatusAndProgressBarEvent` only processes events where `args.ProgressBarName == "Footer"`.
|
||
- `StatusAndProgressBarViewModel.OnUpdate` only processes events where `args.Requester == Parent`.
|
||
- **Progress Value Range**:
|
||
`ProgressBarValue` is set via `Convert.ToInt32(args.ProgressBarPercentage)`, implying values are expected to be numeric (though no explicit validation is present).
|
||
- **Thread Safety**:
|
||
- `StatusAndProgressBarViewModel` subscribes to `StatusAndProgressBarEvent` on `PublisherThread`, but `ProgressBarEvent` in `Initialize(object)` on `UIThread`.
|
||
- `StatusAndProgressFooterViewModel` subscribes to `ProgressBarEvent` without specifying `ThreadOption` (defaults to `UIThread` per Prism).
|
||
- **Property Change Notifications**:
|
||
Properties use `OnPropertyChanged` (or `SetProperty` for `StatusAndProgressBarViewModel`), but only for explicitly named properties—no automatic `INotifyPropertyChanged` implementation beyond overrides.
|
||
|
||
---
|
||
|
||
### 4. Dependencies
|
||
|
||
#### Imports/References
|
||
- **Prism Libraries**: `Prism.Events.IEventAggregator`, `Prism.Regions.IRegionManager`, `Prism.Interactivity.InteractionRequest`.
|
||
- **Unity Container**: `Unity.IUnityContainer` for DI.
|
||
- **Common Infrastructure**:
|
||
- `DTS.Common.Base.BaseViewModel<T>` (base class).
|
||
- `DTS.Common.Events.ProgressBarEvent`, `ProgressBarEventArg`.
|
||
- `DTS.Common.Events.StatusAndProgressBarEvent`, `StatusAndProgressBarEventArgs`.
|
||
- `DTS.Common.Interface.IStatusAndProgressBarFooterView`, `IStatusAndProgressBarView`, `IBaseView`, `IBaseViewModel`.
|
||
|
||
#### Consumed By
|
||
- View layers (`IStatusAndProgressBarFooterView`, `IStatusAndProgressBarView`) bind to these view models.
|
||
- Other modules publish `ProgressBarEvent` (e.g., long-running operations) and `StatusAndProgressBarEvent` (e.g., context-aware status updates).
|
||
|
||
---
|
||
|
||
### 5. Gotchas
|
||
|
||
- **Typo in Property Names**:
|
||
- `ProgressBarVisiblity` (missing 'i' in `Visibility`) in `StatusAndProgressFooterViewModel`.
|
||
- `SearchButtonVisability` (same typo) in `StatusAndProgressBarViewModel`.
|
||
*Risk: Binding failures if XAML uses correct spelling.*
|
||
- **Event Subscription Overlap**:
|
||
`StatusAndProgressBarViewModel` subscribes to *two* events:
|
||
- `StatusAndProgressBarEvent` in constructor (for general status updates).
|
||
- `ProgressBarEvent` in `Initialize(object)` (for named progress bars).
|
||
This may cause redundant updates if both events are published for the same operation.
|
||
- **No Cleanup of Event Subscriptions**:
|
||
Neither view model unsubscribes from events in `Cleanup()` or `Dispose`, risking memory leaks if instances outlive their lifecycle.
|
||
- **Assumed Event Payload Structure**:
|
||
`ProgressBarEventArg` is assumed to have properties like `ProgressBarName`, `SetPercentage`, `ProgressBarPercentage`, etc., but their exact contract is not defined here.
|
||
- **Color Handling**:
|
||
`AggregateStatusColor` is set directly from `args.ProgressBarColor` without validation—invalid `Color` values may cause rendering issues.
|
||
- **Missing `IsDirty` Implementation**:
|
||
`IsDirty` is declared as a read-only property (`public new bool IsDirty { get; }`) but has no setter or backing field—its value is always `false`.
|
||
|
||
*None identified beyond these.* |