--- source_files: - DataPRO/Modules/SystemSettings/Tables/ViewModel/TablesSettingsViewModel.cs generated_at: "2026-04-16T04:40:21.830816+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "d6165d55cd0ea9cd" --- # ViewModel ## Documentation: `TablesSettingsViewModel` --- ### 1. **Purpose** `TablesSettingsViewModel` is the view model for the *Tables Settings* module within the application’s UI layer. It acts as the data context for `ITablesSettingsView`, coordinating UI state (e.g., busy status, menu/navigation visibility) and bridging communication between the view and the application’s event infrastructure via `IEventAggregator`. It also exposes `InteractionRequest`s to support modal notifications and confirmations through Prism’s interaction patterns. This module is part of a modular, MEF-exported component system and is intended to be shared across the application lifecycle. --- ### 2. **Public Interface** #### **Class: `TablesSettingsViewModel`** - **Exported as:** `[Export(typeof(ITablesSettingsView))]` — implies it is intended to be resolved as an `ITablesSettingsView` (likely via MEF or Unity). - **Creation Policy:** `Shared` — only one instance exists per application lifetime. ##### **Properties** | Property | Type | Description | |---------|------|-------------| | `View` | `ITablesSettingsView` | Reference to the associated view; set in constructor. | | `NotificationRequest` | `InteractionRequest` | Used to trigger display of notification popups (e.g., informational messages). | | `ConfirmationRequest` | `InteractionRequest` | Used to trigger confirmation dialogs. | | `IsDirty` | `bool` | Read-only; currently always `false` (no logic implemented to set it). | | `IsBusy` | `bool` | Gets/sets busy state; raises `PropertyChanged` on change. | | `IsMenuIncluded` | `bool` | Gets/sets whether the menu is included in the view; raises `PropertyChanged`. | | `IsNavigationIncluded` | `bool` | Gets/sets whether navigation is included in the view; raises `PropertyChanged`. | | `HeaderInfo` | `string` | Read-only; always returns `"MainRegion"`. | ##### **Methods** | Method | Signature | Description | |--------|-----------|-------------| | `Cleanup` | `void Cleanup()` | No-op stub. | | `CleanupAsync` | `Task CleanupAsync()` | Returns `Task.CompletedTask`. | | `Initialize` | `void Initialize()` | No-op stub. | | `Initialize` | `void Initialize(object parameter)` | No-op stub. | | `Initialize` | `void Initialize(object parameter, object model)` | No-op stub. | | `InitializeAsync` | `Task InitializeAsync()` | Returns `Task.CompletedTask`. | | `InitializeAsync` | `Task InitializeAsync(object parameter)` | Returns `Task.CompletedTask`. | | `Activated` | `void Activated()` | No-op stub. | ##### **Event Handlers (Private)** | Method | Signature | Description | |--------|-----------|-------------| | `OnBusyIndicatorNotification` | `private void OnBusyIndicatorNotification(bool eventArg)` | Sets `IsBusy` to `eventArg`. | | `OnRaiseNotification` | `private void OnRaiseNotification(NotificationContentEventArgs eventArgsWithTitle)` | Transforms `NotificationContentEventArgs` (with title/message/image) into a `Notification` object and raises `NotificationRequest`. Note: it discards the `Title` and `Image` fields of the original event args and passes them via `NotificationContentEventArgs` constructor with empty strings for some parameters — see *Gotchas*. | ##### **Interface Implementations** | Interface | Method | Signature | Description | |-----------|--------|-----------|-------------| | `INotifyPropertyChanged` | `PropertyChanged` | `event PropertyChangedEventHandler PropertyChanged` | Raised via `OnPropertyChanged`. | | `IBasePropertyChanged` | `OnPropertyChanged` | `void IBasePropertyChanged.OnPropertyChanged(string propertyName)` | Delegates to `OnPropertyChanged(propertyName)`. | | — | `SetProperty` | `bool SetProperty(ref T storage, T value, string propertyName = null)` | **Throws `NotImplementedException`** — not implemented. | --- ### 3. **Invariants** - `View.DataContext` is always set to `this` (the view model) in the constructor. - `IsBusy` is initialized to `false` and only modified via `OnBusyIndicatorNotification`, which is subscribed to `BusyIndicatorChangeNotification`. - `NotificationRequest` and `ConfirmationRequest` are initialized in the constructor and never reassigned. - `HeaderInfo` is a constant string `"MainRegion"` and never changes. - `IsDirty` is declared but never set — its value remains `false` for the lifetime of the instance. - `SetProperty` is declared but unimplemented — calling it will always throw `NotImplementedException`. --- ### 4. **Dependencies** #### **Imports / Dependencies (via constructor parameters and `using` directives)** - **Prism Libraries**: - `IEventAggregator` — for pub/sub event handling. - `IRegionManager` — for region navigation (though unused in current implementation). - `Unity` container (`IUnityContainer`) — for dependency injection. - **Custom Infrastructure**: - `DTS.Common.Events.RaiseNotification` — event type subscribed to in constructor. - `DTS.Common.Events.BusyIndicatorChangeNotification` — event type subscribed to in constructor. - `DTS.Common.Base.IBasePropertyChanged` — interface implemented explicitly. - `DTS.Common.Interface.ITablesSettingsView` — view interface. - **MEF**: - `[Export(typeof(ITablesSettingsView))]` — indicates this type is registered as an export for `ITablesSettingsView`. - **UI Framework**: - `Prism.Regions`, `Prism.Events`, `Prism.Interactivity` — used for region management, event aggregation, and interaction requests. #### **Depended Upon By** - The view (`ITablesSettingsView`) — this view model is bound to its `DataContext`. - Likely consumed via MEF/Unity resolution as `ITablesSettingsView`. - Other modules may publish `RaiseNotification` or `BusyIndicatorChangeNotification` events to trigger UI feedback via this view model. --- ### 5. **Gotchas** - **`SetProperty` is unimplemented** — throws `NotImplementedException`. This breaks expected MVVM patterns (e.g., `INotifyPropertyChanged` helpers). Developers should avoid calling it. - **`NotificationContentEventArgs` transformation in `OnRaiseNotification` is lossy**: The method constructs a new `NotificationContentEventArgs` with empty strings for the 2nd and 4th parameters (likely `OkContent` and `CancelContent`), discarding any original values. This may cause unexpected behavior if callers expect those fields to be preserved. - **No-op lifecycle methods**: `Initialize`, `InitializeAsync`, `Activated`, `Cleanup`, and `CleanupAsync` contain no logic — may indicate incomplete implementation or deferred functionality. - **`IsDirty` is never set**: Despite being a public property, it is never assigned — always `false`. This may mislead consumers expecting dirty-state tracking. - **`HeaderInfo` is hardcoded**: Always returns `"MainRegion"` — no dynamic behavior or configuration. - **`IBasePropertyChanged.OnPropertyChanged` is implemented explicitly** — only callable via interface cast. - **Thread context for `BusyIndicatorChangeNotification`**: Subscribed with `ThreadOption.PublisherThread`, meaning the handler runs on the publisher’s thread — may require dispatcher marshaling if the publisher is not on the UI thread (though `IsBusy` setter calls `OnPropertyChanged`, which *should* marshal to UI thread if `INotifyPropertyChanged` is handled by Prism’s binding system). --- *Documentation generated from source file `TablesSettingsViewModel.cs` only. No external behavior or assumptions beyond what is visible in the source.*