Files
2026-04-17 14:55:32 -04:00

7.2 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/Modules/SystemSettings/UISettings/ViewModel/ISOSettingsViewModel.cs
2026-04-16T04:41:03.637144+00:00 Qwen/Qwen3-Coder-Next-FP8 1 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

    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 models 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 publishers 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.