init
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
---
|
||||
source_files:
|
||||
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/Properties/AssemblyInfo.cs
|
||||
generated_at: "2026-04-16T11:03:45.800273+00:00"
|
||||
model: "zai-org/GLM-5-FP8"
|
||||
schema_version: 1
|
||||
sha256: "d475bf20384ac0ba"
|
||||
---
|
||||
|
||||
# Documentation: DTS.Viewer.PSDReport Assembly Configuration
|
||||
|
||||
## 1. Purpose
|
||||
This source file defines the assembly metadata and versioning information for the `DTS.Viewer.PSDReport` library. As a standard .NET `AssemblyInfo.cs` file, it configures the manifest embedded within the compiled DLL, specifying the assembly title, version, copyright, and COM visibility settings. It serves as the build configuration entry point for this specific reporting module within the larger DTS Viewer application.
|
||||
|
||||
## 2. Public Interface
|
||||
This file does not contain executable classes or methods. It applies assembly-level attributes that affect the compiled output's metadata.
|
||||
|
||||
* **`AssemblyTitle("DTS.Viewer.PSDReport")`**: Sets the friendly name for the assembly.
|
||||
* **`AssemblyProduct("DTS.Viewer.PSDReport")`**: Specifies the product name associated with the assembly.
|
||||
* **`AssemblyCopyright("Copyright © 2021")`**: Defines the copyright information.
|
||||
* **`ComVisible(false)`**: Indicates that types within this assembly are not visible to COM components.
|
||||
* **`Guid("3d57ca12-a637-4cdb-b673-d9a5ff0cf062")`**: Specifies a unique identifier for the assembly, used if the project is exposed to COM.
|
||||
* **`AssemblyVersion("1.0.0.0")`**: Sets the assembly version number (Major.Minor.Build.Revision).
|
||||
* **`AssemblyFileVersion("1.0.0.0")`**: Sets the file version number displayed in the file properties.
|
||||
|
||||
## 3. Invariants
|
||||
* **COM Visibility:** All types within this assembly are explicitly hidden from COM components (`ComVisible(false)`).
|
||||
* **Versioning:** The assembly version and file version are currently fixed at `1.0.0.0`. They are not configured to auto-increment (the wildcard syntax `1.0.*` is commented out).
|
||||
* **Identity:** The `Guid` `3d57ca12-a637-4cdb-b673-d9a5ff0cf062` uniquely identifies this specific assembly globally.
|
||||
|
||||
## 4. Dependencies
|
||||
* **Internal Dependencies:**
|
||||
* `System.Reflection`: Required for the assembly attribute definitions.
|
||||
* `System.Runtime.CompilerServices`: Included by default in the template; not actively used for `InternalsVisibleTo` in this snippet.
|
||||
* `System.Runtime.InteropServices`: Required for the `ComVisible` and `Guid` attributes.
|
||||
* **External Dependencies:** None identified in this file. The project likely references other DTS modules, but those relationships are defined in the project file (`.csproj`), not here.
|
||||
|
||||
## 5. Gotchas
|
||||
* **Static Versioning:** The version is hardcoded to `1.0.0.0`. If the build process does not externally override these values (e.g., via CI/CD pipeline parameters), all builds will report as version 1.0.0.0, making version tracking difficult.
|
||||
* **Empty Metadata:** The `AssemblyDescription`, `AssemblyConfiguration`, `AssemblyCompany`, and `AssemblyTrademark` fields are empty strings. This may trigger default behavior or result in missing metadata in the compiled DLL properties.
|
||||
* **Legacy Format:** The existence of an explicit `AssemblyInfo.cs` suggests this project may be using the older .NET Framework SDK style project format. Newer SDK-style projects typically auto-generate this information, which can lead to conflicts (CS0579) if the project file is later upgraded without removing this file.
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
source_files:
|
||||
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/Resources/TranslateExtension.cs
|
||||
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/Resources/StringResources.Designer.cs
|
||||
generated_at: "2026-04-16T11:03:12.267125+00:00"
|
||||
model: "zai-org/GLM-5-FP8"
|
||||
schema_version: 1
|
||||
sha256: "01cf0d845cbc5765"
|
||||
---
|
||||
|
||||
# Documentation: DTS.Viewer.PSDReport.Resources
|
||||
|
||||
## 1. Purpose
|
||||
This module provides localization infrastructure for the `DTS.Viewer.PSDReport` namespace. It consists of a strongly-typed resource accessor class (`StringResources`) generated from a `.resx` file, and a WPF XAML markup extension (`TranslateExtension`) that allows UI elements to bind directly to localized strings using a key. The module ensures that the report module can present user-facing text in different languages without hardcoding strings in the UI logic.
|
||||
|
||||
## 2. Public Interface
|
||||
|
||||
### Class: `TranslateExtension`
|
||||
**Namespace:** `DTS.Viewer.PSDReport`
|
||||
**Inheritance:** `System.Windows.Markup.MarkupExtension`
|
||||
|
||||
This class allows XAML bindings to retrieve localized strings declaratively.
|
||||
|
||||
* **Constructor: `TranslateExtension(string key)`**
|
||||
* Initializes the extension with the resource key to be looked up.
|
||||
* **Method: `ProvideValue(IServiceProvider serviceProvider)`**
|
||||
* **Return Type:** `object` (attributed to return `string`)
|
||||
* **Behavior:** Looks up the provided `_key` via `StringResources.ResourceManager`. Returns the localized string if found. If the key is null or empty, it returns the constant `"#stringnotfound#"`. If the lookup fails (returns null), it returns `"#stringnotfound# "` appended with the missing key name.
|
||||
|
||||
### Class: `StringResources`
|
||||
**Namespace:** `DTS.Viewer.PSDReport.Resources`
|
||||
**Accessibility:** `internal`
|
||||
|
||||
This is a strongly-typed, auto-generated resource class for looking up culture-specific strings.
|
||||
|
||||
* **Property: `ResourceManager`** (static, `System.Resources.ResourceManager`)
|
||||
* Returns the cached `ResourceManager` instance for this assembly. It is lazily initialized upon first access.
|
||||
* **Property: `Culture`** (static, `System.Globalization.CultureInfo`)
|
||||
* Gets or sets the current UI culture used for resource lookups. This overrides the current thread's `CurrentUICulture` for resource lookups via this class.
|
||||
* **Resource Accessors** (static, `string`)
|
||||
* The following properties return localized strings corresponding to their keys:
|
||||
* `DataHeader` ("Data")
|
||||
* `DataSelectionHeader` ("Data selection")
|
||||
* `GraphsDefaultTitle` ("Graphs ")
|
||||
* `ModificationsHeader` ("Modify")
|
||||
* `PSDHeader` ("PSD")
|
||||
* `PSDResultsHeader` ("Results")
|
||||
* `PSDSettingsHeader` ("PSD Settings")
|
||||
* `SettingsTitle` ("Settings")
|
||||
* `TestsDefaultTitle` ("Tests ")
|
||||
|
||||
## 3. Invariants
|
||||
|
||||
* **Fallback Behavior:** `TranslateExtension.ProvideValue` will never return `null`. It guarantees a string return, defaulting to the literal `"#stringnotfound#"` (with optional key suffix) for missing or invalid keys.
|
||||
* **Auto-generation:** `StringResources` is auto-generated. Manual modifications to `StringResources.Designer.cs` will be lost upon regeneration. The source of truth is the corresponding `.resx` file.
|
||||
* **Internal Visibility:** `StringResources` is marked `internal`, restricting access to within the `DTS.Viewer.PSDReport` assembly.
|
||||
* **Thread Safety:** The `ResourceManager` property in `StringResources` uses a standard lazy initialization check (`object.ReferenceEquals(resourceMan, null)`). While standard for generated code, it is not strictly thread-safe in a race condition scenario (though usually harmless for resource managers).
|
||||
|
||||
## 4. Dependencies
|
||||
|
||||
* **Internal Dependencies:**
|
||||
* `TranslateExtension` depends on `StringResources` (specifically `StringResources.ResourceManager`) to perform lookups.
|
||||
* **External Framework Dependencies:**
|
||||
* `System.Windows.Markup`: Required for `MarkupExtension` and `MarkupExtensionReturnTypeAttribute` (implies a dependency on WPF/WindowsBase).
|
||||
* `System.Resources`: Required for `ResourceManager`.
|
||||
* `System.Globalization`: Required for `CultureInfo`.
|
||||
|
||||
## 5. Gotchas
|
||||
|
||||
* **Dynamic vs. Strongly-typed Access:** `TranslateExtension` uses `ResourceManager.GetString` (dynamic lookup by string) rather than the strongly-typed properties (e.g., `StringResources.DataHeader`). This means typos in XAML keys will not cause compile-time errors but will result in the `"#stringnotfound#"` fallback string appearing in the UI at runtime.
|
||||
* **Missing Source File:** The actual translation values (key-value pairs) reside in a `.resx` file (e.g., `StringResources.resx`) which is not included in the provided source. The default English values shown in the XML comments (e.g., "Data", "Graphs ") are the only insight into the actual content.
|
||||
* **Trailing Spaces:** The default values for `GraphsDefaultTitle` ("Graphs ") and `TestsDefaultTitle` ("Tests ") appear to contain trailing spaces in the auto-generated comments. It is unclear if this is intentional or a data artifact without seeing the `.resx` file.
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
source_files:
|
||||
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/View/PSDReportMainView.xaml.cs
|
||||
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/View/PSDReportMainViewGrid.xaml.cs
|
||||
generated_at: "2026-04-16T11:03:50.028977+00:00"
|
||||
model: "zai-org/GLM-5-FP8"
|
||||
schema_version: 1
|
||||
sha256: "7e23a726984c27b1"
|
||||
---
|
||||
|
||||
# Documentation: DTS.Viewer.PSDReport Views
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This module provides WPF view components for the PSD (Power Spectral Density) Report feature within the DTS Viewer application. It contains two partial classes that serve as code-behind for XAML views: `PSDReportMainView` acts as a minimal container view, while `PSDReportMainViewGrid` manages tab focus behavior in response to graph loading events via Prism's event aggregation system.
|
||||
|
||||
---
|
||||
|
||||
## 2. Public Interface
|
||||
|
||||
### `PSDReportMainView` (class)
|
||||
**Implements:** `IPSDReportMainView`
|
||||
|
||||
**Location:** `DTS.Viewer.PSDReport` namespace
|
||||
|
||||
| Member | Signature | Description |
|
||||
|--------|-----------|-------------|
|
||||
| Constructor | `public PSDReportMainView()` | Initializes the XAML component. Contains commented-out code for AvalonDock layout serialization. |
|
||||
|
||||
---
|
||||
|
||||
### `PSDReportMainViewGrid` (class)
|
||||
**Implements:** `IPSDReportMainViewGrid`
|
||||
|
||||
**Location:** `DTS.Viewer.PSDReport` namespace
|
||||
|
||||
| Member | Signature | Description |
|
||||
|--------|-----------|-------------|
|
||||
| Constructor | `public PSDReportMainViewGrid()` | Initializes the XAML component and attaches a `Loaded` event handler. |
|
||||
| `_eventAggregator` | `private IEventAggregator` | Backing field for the Prism event aggregator, resolved at runtime. |
|
||||
| `SetFocus` | `private void SetFocus()` | Selects and focuses the `chartResultsTab` element. |
|
||||
| `PSDReportMainViewGrid_Loaded` | `private void PSDReportMainViewGrid_Loaded(object sender, RoutedEventArgs e)` | Resolves `IEventAggregator` from the container and subscribes to `GraphLoadedCountNotification` events. |
|
||||
| `OnGraphLoadedCountNotification` | `private void OnGraphLoadedCountNotification(GraphLoadedCountNotificationArg arg)` | Event handler that waits 3 seconds then sets focus to the chart results tab via `Dispatcher.BeginInvoke`. |
|
||||
|
||||
---
|
||||
|
||||
## 3. Invariants
|
||||
|
||||
- **Container Availability:** `PSDReportMainViewGrid` requires `ContainerLocator.Container` to be properly initialized before the `Loaded` event fires, otherwise `_eventAggregator` will be null.
|
||||
- **DataContext Type:** The `DataContext` of `PSDReportMainViewGrid` must be castable to `IBaseViewModel` for the event filtering logic in `OnGraphLoadedCountNotification` to function correctly.
|
||||
- **XAML Element Existence:** The `chartResultsTab` element (referenced in `SetFocus()`) must be defined in the associated XAML file.
|
||||
- **Event Matching:** The `OnGraphLoadedCountNotification` handler only executes its focus logic when `arg.ParentVM` matches the view's `DataContext` (after casting to `IBaseViewModel`).
|
||||
|
||||
---
|
||||
|
||||
## 4. Dependencies
|
||||
|
||||
### This module depends on:
|
||||
- `DTS.Common.Interface` — Provides `IPSDReportMainView`, `IPSDReportMainViewGrid`, and `IBaseViewModel`
|
||||
- `DTS.Common.Base` — Referenced but specific types not visible in code-behind
|
||||
- `DTS.Common.Events` — Provides `GraphLoadedCountNotification` event and `GraphLoadedCountNotificationArg`
|
||||
- `Prism.Ioc` — Provides `ContainerLocator` for service resolution
|
||||
- `Prism.Events` — Provides `IEventAggregator` for pub/sub messaging
|
||||
- `System` — `Action` delegate
|
||||
- `System.Threading` — `Thread.Sleep`
|
||||
- `System.Threading.Tasks` — `Task.Run`
|
||||
|
||||
### What depends on this module:
|
||||
- Not determinable from the provided source files alone. Consumers would be modules that instantiate `IPSDReportMainView` or `IPSDReportMainViewGrid` (likely via dependency injection or navigation).
|
||||
|
||||
---
|
||||
|
||||
## 5. Gotchas
|
||||
|
||||
1. **Hardcoded 3-Second Delay:** The `OnGraphLoadedCountNotification` method uses `Thread.Sleep(TimeSpan.FromSeconds(3))` before setting focus. This is a magic number with no configuration or explanation—likely a workaround for timing issues with graph rendering completion.
|
||||
|
||||
2. **Commented-Out AvalonDock Code:** `PSDReportMainView` contains significant commented-out code for layout serialization using `XmlLayoutSerializer` and a file path `.\DataProViewerAvalonDock.config`. This suggests dock panel persistence was previously implemented but intentionally disabled.
|
||||
|
||||
3. **Late Event Subscription:** Per the comment "FB 14797", the event subscription occurs in the `Loaded` event handler rather than the constructor. This means any `GraphLoadedCountNotification` events fired before the view is fully loaded will be missed.
|
||||
|
||||
4. **Silent Failure on Container Resolution:** The `_eventAggregator?.GetEvent<...>()` call uses a null-conditional operator. If `ContainerLocator.Container.Resolve<IEventAggregator>()` returns null, the subscription silently fails with no logging or error handling.
|
||||
|
||||
5. **Dispatcher Threading:** The focus operation is marshaled to the UI thread via `Dispatcher.BeginInvoke`, but the 3-second sleep runs on a background thread via `Task.Run`. This is intentional but could be a source of race conditions if the view is unloaded during the wait period.
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
source_files:
|
||||
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/ViewModel/PSDReportMainViewModel.cs
|
||||
generated_at: "2026-04-16T11:03:20.289994+00:00"
|
||||
model: "zai-org/GLM-5-FP8"
|
||||
schema_version: 1
|
||||
sha256: "280cd655454826b4"
|
||||
---
|
||||
|
||||
# Documentation: PSDReportMainViewModel
|
||||
|
||||
## 1. Purpose
|
||||
The `PSDReportMainViewModel` class serves as the primary view model for the PSD Report module within the DTS Viewer application. It acts as a central coordinator, managing the lifecycle and composition of various child views (graphs, tests, settings, navigation) via Prism's RegionManager and Unity dependency injection. This module handles user interactions related to data selection, calibration settings, and channel view modes, while maintaining state for loaded and selected tests/graphs and communicating changes to other components via an `IEventAggregator`.
|
||||
|
||||
## 2. Public Interface
|
||||
|
||||
### Constructor
|
||||
* `PSDReportMainViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IUnityContainer unityContainer)`
|
||||
* Initializes the view model, creates interaction requests (`NotificationRequest`, `ConfirmationRequest`), resolves the main view (`IPSDReportMainViewGrid`), and sets the DataContext.
|
||||
|
||||
### Properties
|
||||
* `IBaseView View { get; set; }`: Gets or sets the associated view instance.
|
||||
* `InteractionRequest<Notification> NotificationRequest { get; }`: Request object for triggering notifications.
|
||||
* `InteractionRequest<Confirmation> ConfirmationRequest { get; }`: Request object for triggering confirmation dialogs.
|
||||
* **Region Context Properties**:
|
||||
* `object ContextNavigationRegion`: Content for the Navigation region.
|
||||
* `object ContextGraphsRegion`: Content for the GraphList region. **Note:** Getter/Setter references `GraphListRegion`.
|
||||
* `object ContextGraphListRegion`: Content for the GraphList region. **Note:** Identical to `ContextGraphsRegion`.
|
||||
* `object ContextTestsRegion`: Content for the Tests region.
|
||||
* `object ContextLegendRegion`: Content for the Legend region.
|
||||
* `object ContextPropertyRegion`: Auto-property; does not appear to interact with the View.
|
||||
* `object ContextChartOptionsRegion`: Content for the ChartOptions region.
|
||||
* `object ContextViewerSettingsRegion`: Content for the Settings region.
|
||||
* `object ContextReportDataSelectRegion`: Content for the DataSelect region.
|
||||
* `object ContextGraphRegion`: Content for the Graph region.
|
||||
* `object ContextReportChartOptionsRegion`: Content for the ReportChartOptions region.
|
||||
* `object ContextReportResultsRegion`: Content for the ReportResults region.
|
||||
* `string ConfigPath { get; set; }`: Throws `NotImplementedException`.
|
||||
* `string TitleTests { get; set; }`: Title for the Tests section, updated based on selection counts.
|
||||
* `int TotalSelectedTests { get; set; }`: Count of selected tests; updates `TitleTests`.
|
||||
* `int TotalLoadedTests { get; set; }`: Count of loaded tests; updates `TitleTests`.
|
||||
* `string TitleGraphs { get; set; }`: Title for the Graphs section.
|
||||
* `int TotalSelectedGraphs { get; set; }`: Count of selected graphs.
|
||||
* `int TotalLoadedGraphs { get; set; }`: Count of loaded graphs.
|
||||
* `string SelectedDataFolder { get; set; }`: Sets the data folder and publishes `DataFolderChangedEvent`. Ignores null/empty values.
|
||||
* `string SelectedDataFile { get; set; }`: Sets the data file and publishes `DataFolderChangedEvent`. Ignores null/empty values.
|
||||
* `IsoViewMode ChannelCodeViewMode { get; set; }`: Gets or sets the channel view mode; publishes `ChannelCodesViewChangedEvent`.
|
||||
* `CalibrationBehaviors CalibrationBehaviorSetting { get; set; }`: Gets or sets calibration behavior; publishes `CalibrationBehaviorSettingChangedEvent`.
|
||||
* `bool CalibrationBehaviorSettableInViewer { get; set; }`: Determines if calibration is settable; publishes `CalibrationBehaviorSettableInViewerChangedEvent` and manipulates View tab selection directly.
|
||||
* `Visibility SettingsVisibility { get; }`: Controls visibility of settings.
|
||||
* `bool IsBusy { get; set; }`: Controls busy indicator visibility.
|
||||
* `string IsBusyMessage { get; set; }`: Text displayed when busy.
|
||||
* `bool IsMenuIncluded { get; set; }`: Flag for menu inclusion.
|
||||
* `bool IsNavigationIncluded { get; set; }`: Flag for navigation inclusion.
|
||||
* `bool IsDirty`: Throws `NotImplementedException`.
|
||||
|
||||
### Methods
|
||||
* `List<FrameworkElement> GetRegions()`: Retrieves child elements named "Region" from the `MainShell`.
|
||||
* `void Initialize()`: Calls `Subscribe()` to register event listeners.
|
||||
* `void Initialize(object parameter)`: Sets the `Parent` window model, updates parent properties, and subscribes to events.
|
||||
* `void LeftKeyPress()`: Throws `NotImplementedException`.
|
||||
* `void RightKeyPress()`: Throws `NotImplementedException`.
|
||||
* `void ZoomReset()`: Publishes `ResetZoomChangedEvent`.
|
||||
* `void SelectAndIncludeDataFile(string value)`: Sets the selected file and publishes a `DataFolderChangedEvent` with `SetSelected` flag.
|
||||
* `event PropertyChangedEventHandler PropertyChanged`: Event for property change notifications (hides base event).
|
||||
|
||||
## 3. Invariants
|
||||
* **View Resolution**: The `View` property is expected to be an instance of `PSDReportMainViewGrid` (resolved via `IPSDReportMainViewGrid`). All region properties cast `View` to this concrete type, implying the interface `IPSDReportMainViewGrid` is not used for region access, or the concrete type is strictly required for UI element access.
|
||||
* **Event Aggregator**: The class relies heavily on `_eventAggregator` being non-null for almost all property setters and initialization logic.
|
||||
* **Parent Type**: In `Initialize(object parameter)`, the `parameter` must be castable to `IBaseWindowModel`.
|
||||
* **Busy Counter**: The private `reads` integer is used to track nested "busy" states during graph channel reading; it assumes a balanced start/stop notification pattern.
|
||||
|
||||
## 4. Dependencies
|
||||
|
||||
### External Dependencies (Inferred from usings)
|
||||
* **Prism**: `IEventAggregator`, `IRegionManager`, `InteractionRequest`, `Notification`, `Confirmation`.
|
||||
* **Unity**: `IUnityContainer`.
|
||||
* **System.Windows**: `FrameworkElement`, `Visibility`.
|
||||
|
||||
### Internal Dependencies (DTS Namespace)
|
||||
* **Common**: `BaseViewModel`, `IBaseView`, `IBaseWindowModel`, `IBaseViewModel`, `Utils`.
|
||||
* **Enums**: `IsoViewMode`, `CalibrationBehaviors`.
|
||||
* **Events**: `DataFolderChangedEvent`, `ChannelCodesViewChangedEvent`, `CalibrationBehaviorSettingChangedEvent`, `LoadViewModulEvent`, `TestLoadedCountNotification`, etc.
|
||||
* **Views/ViewModels (Resolved via Unity)**:
|
||||
* `IPSDReportMainViewGrid`
|
||||
* `INavigationView` / `INavigationViewModel`
|
||||
* `IPSDReportResultsView` / `IPSDReportResultsViewModel`
|
||||
* `IPSDReportSettingsView` / `IPSDReportSettingsViewModel`
|
||||
* `IChartOptionsView` / `IChartOptionsViewModel`
|
||||
* `IGraphView` / `IGraphViewModel`
|
||||
* `IGraphMainView` / `IGraphMainViewModel`
|
||||
* `IViewerSettingsView` / `IViewerSettingsViewModel`
|
||||
* `ITestSummaryListView` / `ITestSummaryListViewModel`
|
||||
|
||||
## 5. Gotchas
|
||||
|
||||
* **Not Implemented Members**: Several members throw `NotImplementedException` (`ConfigPath`, `IsDirty`, `LeftKeyPress`, `RightKeyPress`). These are likely interface requirements that have not been fulfilled.
|
||||
* **Duplicate Region Properties**: `ContextGraphsRegion` and `ContextGraphListRegion` are functionally identical; both access `((PSDReportMainViewGrid)View).GraphListRegion.Content`. This may be a copy-paste error or redundant API surface.
|
||||
* **MVVM Violation (View Coupling)**: The `CalibrationBehaviorSettableInViewer` setter directly manipulates View UI elements (`graphsTab`, `testsTab`, `chartResultsTab`) by casting `View` to `PSDReportMainViewGrid`. This breaks the separation of concerns typically enforced in MVVM and creates a hard dependency on the concrete View type.
|
||||
* **Member Hiding**: The `new` keyword is used to hide inherited members (`IsBusy`, `IsBusyMessage`, `IsMenuIncluded`, `IsNavigationIncluded`, `PropertyChanged`, `OnPropertyChanged`). This suggests a mismatch between the base class implementation and the requirements of this specific view model, which could lead to confusion if the object is referenced via a base type pointer.
|
||||
* **Unused Property**: `ContextPropertyRegion` is defined as an auto-property but is never assigned or used within the class logic, unlike other region properties.
|
||||
* **Magic Strings**: Region names (e.g., "Graph", "DataSelect") and property names in `OnPropertyChanged` are passed as string literals.
|
||||
Reference in New Issue
Block a user