This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
---
source_files:
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Model/PSDReportSettingsModel.cs
generated_at: "2026-04-16T11:01:19.271156+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "b9213b8d6a0e210e"
---
# Documentation: PSDReportSettingsModel
## 1. Purpose
`PSDReportSettingsModel` is a model class that stores and manages configuration settings for Power Spectral Density (PSD) report generation within the DTS Viewer application. It encapsulates filter parameters (low-pass and high-pass), windowing configuration (width, type, averaging, overlapping), and data range boundaries. The class implements `INotifyPropertyChanged` via `BasePropertyChanged` and coordinates with a parent view model through the `IPSDReportSettingsModel` interface, automatically notifying the parent of changes when `CanPublishChanges` is enabled.
---
## 2. Public Interface
### Properties
| Property | Type | Default Value | Description |
|----------|------|---------------|-------------|
| `Parent` | `IPSDReportSettingsViewModel` | `null` | Reference to the parent view model. Setter includes equality check to avoid redundant updates. |
| `CanPublishChanges` | `bool` | `true` | Controls whether property changes trigger `Parent.PublishChanges()` notification. |
| `LowPassFilterEnabled` | `bool` | `false` | Enables/disables low-pass filter. Sets `ReadData = true` on change. |
| `LowPassFilterFrequency` | `double` | `2000` | Low-pass filter cutoff frequency. Sets `ReadData = true` on change. |
| `LowPassFilterType` | `PassFilterType` | `PassFilterType.Butterworth` | Low-pass filter algorithm type. Sets `ReadData = true` on change. |
| `LowPassFilterOrder` | `int` | `8` | Low-pass filter order. Sets `ReadData = true` on change. |
| `HighPassFilterEnabled` | `bool` | `false` | Enables/disables high-pass filter. Sets `ReadData = true` on change. |
| `HighPassFilterFrequency` | `double` | `5` | High-pass filter cutoff frequency. Sets `ReadData = true` on change. |
| `HighPassFilterType` | `PassFilterType` | `PassFilterType.Butterworth` | High-pass filter algorithm type. Sets `ReadData = true` on change. |
| `HighPassFilterOrder` | `int` | `8` | High-pass filter order. Sets `ReadData = true` on change. |
| `WindowWidth` | `WindowWidth` | `WindowWidth.FortyNinetySix` | Window width for spectral analysis. Sets `ReadData = true` on change. |
| `WindowType` | `WindowType` | `WindowType.Hanning` | Window function type. Sets `ReadData = true` on change. |
| `WindowAveragingType` | `WindowAveragingType` | `WindowAveragingType.Averaging` | Averaging method for windows. Sets `ReadData = true` on change. |
| `WindowOverlappingPercent` | `double` | `50` | Window overlap percentage. Sets `ReadData = true` on change. |
| `ShowEnvelope` | `bool` | `false` | Controls envelope display. Sets `ReadData = true` on change. |
| `IsSaved` | `bool` | *(not visible)* | Read-only property indicating save state. No setter visible in source. |
| `ReadData` | `bool` | `false` | Flag indicating whether data should be re-read. |
| `DataStart` | `double` | `0D` | Start boundary for data range. Sets `ReadData = true` on change. |
| `DataEnd` | `double` | `0D` | End boundary for data range. Sets `ReadData = true` on change. |
### Methods
| Method | Signature | Description |
|--------|-----------|-------------|
| `OnPropertyChanged` | `void OnPropertyChanged(string propertyName)` | Override that raises `PropertyChanged` event and conditionally calls `Parent?.PublishChanges()` unless the property is `CanPublishChanges`, `Parent`, or `ReadData`. |
### Events
| Event | Type | Description |
|-------|------|-------------|
| `PropertyChanged` | `PropertyChangedEventHandler` | Override of base event; raised when any property value changes. |
---
## 3. Invariants
1. **ReadData Side Effect**: The following properties always set `ReadData = true` when modified:
- `LowPassFilterEnabled`, `LowPassFilterFrequency`, `LowPassFilterType`, `LowPassFilterOrder`
- `HighPassFilterEnabled`, `HighPassFilterFrequency`, `HighPassFilterType`, `HighPassFilterOrder`
- `WindowWidth`, `WindowType`, `WindowAveragingType`, `WindowOverlappingPercent`, `ShowEnvelope`
- `DataStart`, `DataEnd`
2. **Publishing Exclusion**: Changes to `CanPublishChanges`, `Parent`, or `ReadData` do **not** trigger `Parent.PublishChanges()`.
3. **Publishing Gate**: `Parent?.PublishChanges()` is only invoked when `CanPublishChanges == true`.
4. **Parent Equality Check**: The `Parent` property setter checks `_parent != null && _parent.Equals(value)` before updating, preventing redundant property change notifications.
5. **IsSaved Immutability**: `IsSaved` has no setter visible in the source; its value is determined externally (possibly via constructor or reflection).
---
## 4. Dependencies
### This Module Depends On:
- `DTS.Common.Enums.Viewer.Reports` — Provides `PassFilterType`, `WindowWidth`, `WindowType`, `WindowAveragingType` enums
- `DTS.Common.Interface` — Provides `IPSDReportSettingsViewModel` interface
- `Common.Base.BasePropertyChanged` — Base class providing `SetProperty` method and `INotifyPropertyChanged` infrastructure
### Consumers (Inferred):
- Any module implementing `IPSDReportSettingsViewModel` (the parent view model)
- Any code referencing `IPSDReportSettingsModel` interface
---
## 5. Gotchas
1. **ReadData Never Auto-Resets**: Setting `ReadData = true` via property changes never automatically resets it back to `false`. The consuming code must manage this flag's lifecycle.
2. **IsSaved Has No Setter**: The `IsSaved` property is read-only with no initialization visible in this file. Its value must be set through a mechanism not shown in the source (possibly constructor injection, reflection, or partial class extension).
3. **Parent Can Be Null**: The `Parent` property is not validated for null before use in `OnPropertyChanged`. While `Parent?.PublishChanges()` uses null-conditional operator, if `Parent` is null during other operations, behavior is undefined.
4. **Inconsistent Setter Patterns**: The `Parent` setter uses manual equality checking and `OnPropertyChanged("Parent")`, while most other properties use `SetProperty()`. The `CanPublishChanges` setter uses direct field assignment with `OnPropertyChanged("CanPublishChanges")`. This inconsistency may lead to subtle behavioral differences.
5. **No Validation on Numeric Inputs**: Properties like `LowPassFilterFrequency`, `HighPassFilterFrequency`, `WindowOverlappingPercent`, `DataStart`, and `DataEnd` accept any `double` value without bounds checking. Invalid values (e.g., negative frequencies, overlapping > 100) are not prevented at the model level.

View File

@@ -0,0 +1,40 @@
---
source_files:
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Properties/AssemblyInfo.cs
generated_at: "2026-04-16T11:00:33.367677+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "86a096c3d5cd87e0"
---
# Documentation: DTS.Viewer.PSDReportSettings Assembly Configuration
## 1. Purpose
This file provides assembly-level metadata and configuration for the `DTS.Viewer.PSDReportSettings` component within the DTS Viewer application. It defines the assembly's identity, version information, and COM visibility settings using .NET attributes. As a standard `AssemblyInfo.cs` file, it serves as the manifest entry point for the compiled DLL, ensuring the module is correctly identified by the .NET runtime and host application.
## 2. Public Interface
This file does not contain executable classes or methods. It exposes the following assembly-level attributes as its public interface:
* **`AssemblyTitle("DTS.Viewer.PSDReportSettings")`**: Specifies the display name for the assembly.
* **`AssemblyProduct("DTS.Viewer.PSDReportSettings")`**: Specifies the product name associated with this assembly.
* **`AssemblyVersion("1.0.0.0")`**: Specifies the version number of the assembly used by the common language runtime.
* **`AssemblyFileVersion("1.0.0.0")`**: Specifies the Win32 file version resource; typically mirrors the assembly version.
* **`ComVisible(false)`**: Indicates that types within this assembly are not visible to COM components by default.
* **`Guid("82faae11-3be9-4223-beb8-8a53643866f8")`**: Specifies a unique identifier for the assembly if it is exposed to COM.
## 3. Invariants
* **COM Visibility:** The attribute `[assembly: ComVisible(false)]` ensures that no types within this assembly are exposed to COM unless a specific type is explicitly marked as visible.
* **Versioning:** Both the logical assembly version and the physical file version are currently fixed at `1.0.0.0`.
* **Identity:** The assembly is identified by the title `DTS.Viewer.PSDReportSettings` and the GUID `82faae11-3be9-4223-beb8-8a53643866f8`.
## 4. Dependencies
* **Internal Dependencies:**
* `System.Reflection`: Required for the assembly attribute definitions.
* `System.Runtime.CompilerServices`: Required for assembly attribute support.
* `System.Runtime.InteropServices`: Required for the `ComVisible` and `Guid` attributes.
* **External Dependencies:** None identified from this source file alone. The module name suggests it is a plugin or sub-module of the larger `DTS Viewer` system.
## 5. Gotchas
* **Hardcoded Versions:** The `AssemblyVersion` and `AssemblyFileVersion` are hardcoded to `1.0.0.0`. If the project uses Continuous Integration (CI) to auto-increment versions, this file may override those settings or require manual updating during releases.
* **SDK-Style Projects:** If this project is migrated to the modern SDK-style `.csproj` format, the attributes defined here may conflict with auto-generated attributes, resulting in compiler warnings (CS0579) regarding duplicate attributes.
* **Missing Metadata:** The `AssemblyDescription`, `AssemblyConfiguration`, `AssemblyCompany`, and `AssemblyTrademark` attributes are initialized as empty strings, which may result in missing metadata in the compiled DLL properties.

View File

@@ -0,0 +1,118 @@
---
source_files:
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Resources/TranslateExtension.cs
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Resources/StringResources.Designer.cs
generated_at: "2026-04-16T11:00:37.156668+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "5a446a4aa0389800"
---
# Documentation: DTS.Viewer.PSDReportSettings.Resources
## 1. Purpose
This module provides localization/translation infrastructure for the PSD (Power Spectral Density) Report Settings UI within the DTS Viewer application. It consists of a WPF XAML markup extension (`TranslateExtension`) that enables declarative resource binding in XAML, and a strongly-typed auto-generated resource accessor class (`StringResources`) containing localized strings for filter configurations, window settings, envelope display options, and export functionality.
---
## 2. Public Interface
### `TranslateExtension` (class)
**Namespace:** `DTS.Viewer.PSDReportSettings`
**Inheritance:** `MarkupExtension`
**Attribute:** `[MarkupExtensionReturnType(typeof(string))]`
A WPF markup extension that resolves localization keys to localized strings at XAML parse time.
| Member | Signature | Description |
|--------|-----------|-------------|
| Constructor | `TranslateExtension(string key)` | Initializes the extension with the resource key to look up. The key is stored in a readonly field `_key`. |
| Method | `object ProvideValue(IServiceProvider serviceProvider)` | Returns the localized string for `_key` from `StringResources.ResourceManager`. Returns `#stringnotfound#` if `_key` is null or empty. Returns `#stringnotfound# <key>` if the key does not exist in the resource file. |
---
### `StringResources` (class)
**Namespace:** `DTS.Viewer.PSDReportSettings.Resources`
**Access:** `internal`
**Attribute:** `[GeneratedCode]`, `[DebuggerNonUserCode]`, `[CompilerGenerated]`
An auto-generated strongly-typed resource accessor class. **Not publicly accessible outside the assembly.**
| Member | Signature | Description |
|--------|-----------|-------------|
| Property | `static ResourceManager ResourceManager` | Lazily-initialized cached ResourceManager instance for the `DTS.Viewer.PSDReportSettings.Resources.StringResources` resource bundle. |
| Property | `static CultureInfo Culture` | Gets or sets the current UI culture for resource lookups. Overrides `Thread.CurrentUICulture` for this resource class. |
**Localized String Properties (all `internal static string`):**
| Property Name | Default Value (English) | Context |
|---------------|------------------------|---------|
| `EnvelopeHeader` | "Envelope" | UI header |
| `ExportPSDHeader` | "Export" | UI header |
| `ExportPSDtoCSV` | "Export PSD to CSV" | Export action |
| `ExportPSDtoPDF` | "Export PSD to PDF" | Export action |
| `FilterCenterFrequency` | "Center frequency" | Filter setting label |
| `FilterOrder` | "Filter order" | Filter setting label |
| `FilterSettingsHeader` | "Filters" | UI header |
| `FilterType` | "Filter type" | Filter setting label |
| `FilterType_Bessel` | "Bessel" | Filter type enum value |
| `FilterType_Butterworth` | "Butterworth" | Filter type enum value |
| `FilterType_LinkwitzRiley` | "Linkwitz-Riley" | Filter type enum value |
| `HighPassFilter` | "High pass filter" | Filter type |
| `Hz` | "Hz" | Unit label |
| `LowPassFilter` | "Low pass filter" | Filter type |
| `PSDSettingsHeader` | "PSD settings" | UI header |
| `ShowEnvelope` | "Show Envelope" | Checkbox/toggle label |
| `WindowAveragingType` | "Averaging type" | Window setting label |
| `WindowOverlappingPercent` | "Overlapping %" | Window setting label |
| `WindowSettingsHeader` | "Window" | UI header |
| `WindowType` | "Window type" | Window setting label |
| `WindowWidth` | "Window width" | Window setting label |
---
## 3. Invariants
1. **Key immutability:** The `_key` field in `TranslateExtension` is `readonly` and set only at construction time.
2. **Fallback behavior:** `ProvideValue` will never return `null`. It returns the constant `"#stringnotfound#"` for null/empty keys, or `"#stringnotfound# <key>"` for missing resource entries.
3. **ResourceManager singleton:** The `ResourceManager` property uses lazy initialization with a null-check pattern; once initialized, the same instance is returned for all subsequent calls.
4. **Thread-safety of ResourceManager:** The lazy initialization in `StringResources.ResourceManager` is **not thread-safe** (uses simple null check without locking). Concurrent access during first initialization could potentially create multiple ResourceManager instances.
5. **Internal visibility:** `StringResources` is marked `internal`, restricting access to within the `DTS.Viewer.PSDReportSettings` assembly.
---
## 4. Dependencies
### This module depends on:
- `System` (core types)
- `System.Windows.Markup` (`MarkupExtension`, `MarkupExtensionReturnTypeAttribute`)
- `System.Resources` (`ResourceManager`)
- `System.Globalization` (`CultureInfo`)
- `System.CodeDom.Compiler` (`GeneratedCodeAttribute`)
- `System.Diagnostics` (`DebuggerNonUserCodeAttribute`)
- `System.Runtime.CompilerServices` (`CompilerGeneratedAttribute`)
### External resource dependency:
- A `.resx` file (not shown in source) named `StringResources.resx` must exist in the `DTS.Viewer.PSDReportSettings.Resources` namespace to provide the actual localized values.
### What depends on this module:
- **Unclear from source alone.** The `TranslateExtension` is designed for XAML consumption within the PSD Report Settings UI, but the specific XAML files or controls using it are not present in the provided source.
---
## 5. Gotchas
1. **Auto-generated code warning:** `StringResources.Designer.cs` is tool-generated. Manual edits will be overwritten when the resource file is regenerated. The source explicitly warns: "Changes to this file may cause incorrect behavior and will be lost if the code is regenerated."
2. **Missing key visibility:** Missing localization keys result in visible error strings (`#stringnotfound#`) appearing in the UI rather than silent failures or exceptions. This is intentional for debugging but could leak into production if resource files are incomplete.
3. **Thread-safety gap:** The `ResourceManager` property getter performs a non-atomic check-then-assign pattern (`if (object.ReferenceEquals(resourceMan, null))`). Under concurrent access, multiple `ResourceManager` instances could be created, though the functional impact is likely minimal.
4. **Culture must be set explicitly:** The `StringResources.Culture` property allows overriding the current thread's UI culture, but it must be set manually. If never set, `resourceCulture` remains `null` and `ResourceManager.GetString` uses `Thread.CurrentUICulture`.
5. **No design-time validation:** The `TranslateExtension` constructor accepts any string key without validation. Typos in XAML will only manifest as `#stringnotfound#` at runtime.

View File

@@ -0,0 +1,54 @@
---
source_files:
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/View/PSDReportSettingsView.xaml.cs
generated_at: "2026-04-16T11:00:59.568454+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "5b2351e33ed49693"
---
# Documentation: PSDReportSettingsView
## 1. Purpose
`PSDReportSettingsView` is a WPF view component that provides the user interface for configuring Power Spectral Density (PSD) report settings within the DTS Viewer application. It implements `IPSDReportSettingsView` and serves as the presentation layer for report configuration, exposing selectable options for spectral analysis parameters such as FFT window widths.
## 2. Public Interface
| Member | Signature | Description |
|--------|-----------|-------------|
| Constructor | `public PSDReportSettingsView()` | Initializes the view by calling `InitializeComponent()`, which loads the associated XAML layout. |
| Property | `public List<int> AvailableWindowWidths` | Returns a new list containing valid FFT window size options: `{ 512, 1024, 2048, 4096, 8192 }`. Each access creates a new list instance. |
**Implemented Interface:**
- `IPSDReportSettingsView` (from `DTS.Common.Interface`)
## 3. Invariants
- **Window width values are fixed**: The `AvailableWindowWidths` property always returns the same five integer values (512, 1024, 2048, 4096, 8192), representing power-of-two FFT sizes.
- **New instance per access**: `AvailableWindowWidths` creates and returns a new `List<int>` on every property getter invocation; it does not cache the collection.
- **XAML initialization required**: The constructor must call `InitializeComponent()` before the view can be used, as this is a code-behind for a XAML file.
## 4. Dependencies
**This module depends on:**
- `DTS.Common.Interface` — Provides the `IPSDReportSettingsView` interface that this class implements.
- `System.Collections.Generic` — Provides `List<T>` for the window widths collection.
- `Xceed.Wpf.Toolkit.PropertyGrid.Attributes` — Imported but **not used** in the visible source code.
- The corresponding XAML file (`PSDReportSettingsView.xaml`) — Paired via WPF partial class mechanism.
**What depends on this module:**
- Unclear from source alone. Consumers would reference this view through the `IPSDReportSettingsView` interface, likely a presenter or view model following a MVP/MVVM pattern.
## 5. Gotchas
- **Unused import**: The `Xceed.Wpf.Toolkit.PropertyGrid.Attributes` namespace is imported but no attributes or types from it are used in the visible code. This may be dead code or intended for future use.
- **Commented-out members**: Three properties (`AvailablePassFilterTypes`, `AvailableWindowAveragingTypes`, `AvailableWindowTypes`) and their backing fields are fully commented out. These referenced `IItemsSource` and enum item source classes from `DTS.Common.Enums.Viewer.Reports`. This suggests either:
- Incomplete refactoring
- Features moved elsewhere
- Work-in-progress that was disabled
- **Allocation on every access**: The `AvailableWindowWidths` property allocates a new `List<int>` on every call. If accessed frequently (e.g., in UI binding update loops), this could cause unnecessary garbage collection pressure. Consider caching if performance becomes an issue.
- **Interface contract unclear**: The `IPSDReportSettingsView` interface definition is not provided, so the expected contract beyond what's implemented here is unknown.

View File

@@ -0,0 +1,102 @@
---
source_files:
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/ViewModel/PSDReportSettingsViewModel.cs
generated_at: "2026-04-16T11:00:01.546105+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "9dcac2937b5c346b"
---
# Documentation: PSDReportSettingsViewModel.cs
## 1. Purpose
This module provides a ViewModel for configuring PSD (Power Spectral Density) report settings within the DTS Viewer application. It acts as a mediator between the view layer and the data model, responding to graph-related events (channel selection, axis changes, graph clearing) and publishing setting changes to other system components via an event aggregator. The class follows the MVVM pattern using Prism framework conventions.
---
## 2. Public Interface
### Class: `PSDReportSettingsViewModel`
**Namespace:** `DTS.Viewer.PSDReportSettings`
**Inherits from:** `BaseViewModel<IPSDReportSettingsModel>`
**Implements:** `IPSDReportSettingsViewModel`
#### Properties
| Property | Type | Access | Description |
|----------|------|--------|-------------|
| `View` | `IBaseView` | get/set | Reference to the associated view; DataContext is set to `this` in constructor. |
| `Parent` | `IBaseViewModel` | get/set | Parent ViewModel reference, passed during initialization. |
| `Model` | `IPSDReportSettingsModel` | get/set | Hides base `Model` property. Backed by private `_model` field; raises `OnPropertyChanged("Model")` on set. |
| `NotificationRequest` | `InteractionRequest<Notification>` | get | Used to raise notification dialogs. |
| `ConfirmationRequest` | `InteractionRequest<Confirmation>` | get | Hides base property. Used to raise confirmation dialogs. |
#### Constructor
```csharp
public PSDReportSettingsViewModel(
IPSDReportSettingsView view,
IRegionManager regionManager,
IEventAggregator eventAggregator,
IUnityContainer unityContainer)
```
Initializes the ViewModel, sets the View's DataContext, creates interaction requests, and stores references to the event aggregator and Unity container.
#### Methods
| Method | Signature | Description |
|--------|-----------|-------------|
| `Initialize` | `override void Initialize()` | Empty override. No initialization logic. |
| `Initialize` | `override void Initialize(object parameter)` | Sets `Parent` from parameter, calls `Subscribe()`, resolves `IPSDReportSettingsModel` from container, and sets `Model.Parent = this`. |
| `PublishChanges` | `void PublishChanges()` | Publishes a `PSDReportSettingsChangedEvent` with a `PSDReportSettingsChangedEventArg` containing the current `Model` and `Parent`. |
---
## 3. Invariants
1. **Parent-Child Relationship:** The `Parent` property must be an `IBaseViewModel` type; it is cast directly from the `object parameter` in `Initialize(object parameter)` without null checking.
2. **Event Filtering:** Event handlers (`OnChartAxisChanged`, `OnGraphSelectedChannelsChanged`) filter events by checking `arg?.ParentVM != Parent`. Events not matching the parent are ignored.
3. **Model Resolution:** The `Model` is resolved from the Unity container during `Initialize(object parameter)`, not injected via constructor.
4. **Publish Control:** During X-axis changes in `OnChartAxisChanged`, `Model.CanPublishChanges` is set to `false` before modifying `DataStart`/`DataEnd`, then restored to `true` before calling `PublishChanges()`.
5. **DataContext Assignment:** The View's DataContext is assigned to `this` (the ViewModel) in the constructor, not to the Model (a commented line suggests this was previously different).
---
## 4. Dependencies
### Imports (this module depends on):
- `DTS.Common.Base` - Provides `BaseViewModel<T>`
- `DTS.Common.Events` - Provides event args: `ChartAxisChangedEventArg`, `GraphClearNotificationArg`, `GraphSelectedChannelsNotificationArg`, `PSDReportSettingsChangedEvent`, `PSDReportSettingsChangedEventArg`
- `DTS.Common.Interactivity` - Provides `InteractionRequest<T>`, `Notification`, `Confirmation`
- `DTS.Common.Interface` - Provides interfaces: `IBaseView`, `IBaseViewModel`, `IPSDReportSettingsModel`, `IPSDReportSettingsView`, `IPSDReportSettingsViewModel`
- `Prism.Events` - Provides `IEventAggregator`
- `Prism.Regions` - Provides `IRegionManager`
- `Unity` - Provides `IUnityContainer`
### Consumers (what depends on this module):
- Not determinable from this source file alone. Likely consumed by View classes and/or registered in a module initialization or DI container configuration.
---
## 5. Gotchas
1. **Member Hiding:** Both `Model` and `ConfirmationRequest` properties use the `new` keyword, hiding inherited members from `BaseViewModel<T>`. This could lead to unexpected behavior if the base class is accessed polymorphically.
2. **Commented-Out Code:** Several code blocks are commented out, including:
- A `Standalone` property
- Y-axis handling in `OnChartAxisChanged` (lines setting `MinFixedY`/`MaxFixedY`)
- `PublishChanges()` call in `OnGraphSelectedChannelsChanged`
- A subscription to `CursorsAlailableChangedEvent` in `Subscribe()`
This suggests incomplete features or work-in-progress that may cause confusion.
3. **Empty `Initialize()` Override:** The parameterless `Initialize()` method is empty. If base class calls this method, no initialization occurs.
4. **Direct Cast Without Validation:** In `Initialize(object parameter)`, the parameter is cast directly to `IBaseViewModel` without null or type checking, which could throw `InvalidCastException` or result in null.
5. **Unused `OnRaiseNotification` Method:** The `OnRaiseNotification` method is private with no apparent callers within this class. It may be dead code or intended for future use.