The ISOSettingsViewModel class serves as the MVVM-compliant view model for the ISO Settings module within the application. It acts as the intermediary between the IISOSettingsView (UI) and the IISOSettingsModel (data layer), managing UI state (e.g., busy status, dirty state, menu/navigation inclusion flags), handling user interactions via Prism’s InteractionRequest pattern, and coordinating data loading and saving. It subscribes to global events (e.g., RaiseNotification, BusyIndicatorChangeNotification) to decouple cross-module communication and integrates with Prism’s region management and Unity DI container for modular composition.
Initializes the view model, sets up event subscriptions, instantiates ISOSettingsModel, loads initial data via Model.LoadData(), and assigns it to ISOData. Also sets View.DataContext = ISOData.
Properties
Property
Type
Description
View
IISOSettingsView
Reference to the associated view. Set externally (e.g., via Prism navigation).
Model
IISOSettingsModel
Reference to the data model used for loading/saving ISO settings. Initialized in constructor.
ISOData
IISOSettingsData
The current ISO settings data model. Raises PropertyChanged on change.
IsBusy
bool
Indicates whether a long-running operation is in progress. Bound to UI busy indicator.
IsDirty
bool
Declared but never set — no logic updates this property (see Gotchas).
IsMenuIncluded
bool
UI state flag indicating whether the menu section is included in the view.
IsNavigationIncluded
bool
UI state flag indicating whether the navigation section is included in the view.
HeaderInfo
string
Returns "MainRegion" — likely used for region naming or header labeling.
InteractionRequests
Property
Type
Description
NotificationRequest
InteractionRequest<Notification>
Triggers display of notification popups (e.g., alerts).
ConfirmationRequest
InteractionRequest<Confirmation>
Triggers confirmation dialogs (e.g., "Are you sure?").
Methods
Method
Signature
Description
SaveData
public void SaveData()
Delegates saving of ISOData to Model.SaveData(ISOData).
Cleanup
public void Cleanup()
No-op stub.
CleanupAsync
public Task CleanupAsync()
Returns Task.CompletedTask.
Initialize
public void Initialize() / Initialize(object) / Initialize(object, object)
All no-op stubs.
InitializeAsync
public Task InitializeAsync() / InitializeAsync(object)
Converts NotificationContentEventArgs to Notification and raises NotificationRequest.
OnPropertyChanged
public void OnPropertyChanged(string propertyName)
Raises PropertyChanged event for the specified property.
Interface Implementation
Implements INotifyPropertyChanged (via PropertyChanged event and OnPropertyChanged).
Exports as [Export(typeof(IISOSettingsView))] — note: this is likely a misnomer; should be IISOSettingsViewModel (see Gotchas).
3. Invariants
ISOData must be non-null after construction (initialized via Model.LoadData()).
View.DataContext is always set to ISOData in the constructor.
IsBusy is updated exclusively via OnBusyIndicatorNotification(bool), triggered by BusyIndicatorChangeNotification events.
NotificationRequest is raised only via OnRaiseNotification(NotificationContentEventArgs), which wraps the event args in a Notification object with Content and Title.
Model is instantiated once in the constructor and never reassigned.
IsMenuIncluded and IsNavigationIncluded are boolean flags with no validation logic — their values are arbitrary until set by external code (e.g., view or user interaction).
The module exports ISOSettingsViewModel as IISOSettingsView — suggesting it is consumed by Prism’s region navigation system as a view (though the export type is likely incorrect).
Other modules may publish RaiseNotification or BusyIndicatorChangeNotification events to trigger UI feedback.
5. Gotchas
Export Type Mismatch: The class is decorated with [Export(typeof(IISOSettingsView))], but it implements IISOSettingsViewModel. This is likely a bug — the export should be typeof(IISOSettingsViewModel) to align with Prism conventions and avoid runtime resolution errors.
IsDirty is Unused: The IsDirty property is declared but never updated. No logic sets it to true (e.g., on data change), so it will always remain false.
No Validation on Save: SaveData() directly passes ISOData to Model.SaveData() without validation or error handling in the view model.
Event Handler Logic is Fragile: OnRaiseNotification constructs a new NotificationContentEventArgs("", "", ...) with empty strings for Title2 and Image2, but the comment implies the Notification object expects a NotificationContentEventArgsWithoutTitle — this suggests a mismatch between the event args type and the expected payload, risking runtime issues if NotificationContentEventArgs is not compatible.
No Cleanup Logic: Cleanup() and CleanupAsync() are empty. If ISOSettingsViewModel subscribes to long-lived events (e.g., RaiseNotification), it should unsubscribe in Cleanup() to prevent memory leaks — though Prism’s EventAggregator uses weak references by default, so this may be mitigated.
Activated() is a No-op: The IRegionMemberLifetime or Prism lifecycle hooks (Activated, Deactivated) are not utilized beyond stubs.
Thread Safety: OnBusyIndicatorNotification uses ThreadOption.PublisherThread, but no other thread-safety guarantees are documented for IsBusy or ISOData access.
Documentation generated from source file DataPRO/Modules/SystemSettings/ISOSettings/ViewModel/ISOSettingsViewModel.cs.