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

7.0 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/Modules/Hardware/HardwareList/View/HardwareListOverdueView.xaml.cs
DataPRO/Modules/Hardware/HardwareList/View/HardwareListReplaceView.xaml.cs
DataPRO/Modules/Hardware/HardwareList/View/SLICE6TreeView.xaml.cs
DataPRO/Modules/Hardware/HardwareList/View/HardwareListSelectView.xaml.cs
DataPRO/Modules/Hardware/HardwareList/View/HardwareListView.xaml.cs
2026-04-16T04:38:01.309494+00:00 Qwen/Qwen3-Coder-Next-FP8 1 19f25015f9f12fa7

View

Purpose

This module provides WPF view implementations for the hardware diagnostics hardware list feature, serving as the UI layer that binds to IHardwareListViewModel and related interfaces. It enables users to view, sort, filter, and manipulate hardware items—including overdue items, replaceable units, and SLICE6 associations—through a set of specialized views (HardwareListView, HardwareListOverdueView, HardwareListReplaceView, HardwareListSelectView, SLICE6TreeView). These views handle user interactions (e.g., column header clicks, button presses, tree node operations) and delegate business logic to the underlying view model, while also publishing PageModifiedEvent to signal state changes.


Public Interface

All classes implement interfaces in the DTS.Common.Interface.DASFactory.Diagnostics.HardwareList namespace (e.g., IHardwareListView, IHardwareListOverdueView). They expose no public methods beyond their constructors; all behavior is driven via event handlers wired in XAML. The interfaces they implement are assumed to define the contract for view-model binding, but the actual public surface is minimal and consists solely of:

Class Constructor Notes
HardwareListOverdueView() public HardwareListOverdueView() Initializes component; handles ListViewHeader_Click for sorting overdue items.
HardwareListReplaceView() public HardwareListReplaceView() Initializes component; handles Replace_Click to invoke IHardwareListViewModel.Replace().
SLICE6TreeView() public SLICE6TreeView() Initializes component; handles Remove_Click, Add_Click, and Swap_Click to manage SLICE6 associations and publish PageModifiedEvent.
HardwareListSelectView() public HardwareListSelectView() Initializes component; provides InitializeColumns(bool bSteamingTest) to dynamically show/hide the DSPStreamingColumn. Also handles sorting, filtering, inclusion, and chain sample rate mixed button clicks.
HardwareListView() public HardwareListView() Initializes component; handles search, sorting, double-click (via MouseDoubleClick), and tree view popup invocation (TreeviewButton_Click).

Note

: No public methods beyond constructors exist in the source. All functionality is exposed via private event handlers (ListViewHeader_Click, Replace_Click, etc.) bound in XAML.


Invariants

  • View Model Contract: All views assume their DataContext implements a specific interface (IHardwareListViewModel, ISLICE6TreeNode, or IHardware) and that required properties (e.g., SelectedSLICE6, SelectedSLICE6DB, ShowCompact) are non-null when used. Null checks are performed before use, but no fallback behavior is defined.
  • Event Publishing: In SLICE6TreeView, after Associate, UnAssociate, or Swap operations, a PageModifiedEvent with status Modified is always published—regardless of whether the operation succeeded or the tree node was valid.
  • Column Management: In HardwareListSelectView.InitializeColumns, the CalDateColumn index is used as a reference point for inserting DSPStreamingColumn; if CalDateColumn is not found (index < 0), index 0 is used as fallback.
  • Sorting Consistency: All column header click handlers (ListViewHeader_Click, GridViewColumnHeader_OnClick, GridViewColumnHeaderCheckBox_OnClick) invoke Sort(..., true), implying ascending sort order is hardcoded (or true indicates a toggle flag—source does not clarify).
  • Popup State: In HardwareListView.TreeviewButton_Click, the SLICE6TreeViewPopup is explicitly closed before reassigning its Child and reopening—ensuring only one instance is active at a time.

Dependencies

External Dependencies (imports):

  • System.Windows.* (WPF core: Controls, Data, Media, Input)
  • DTS.Common.Interface.DASFactory.Diagnostics.HardwareList — defines core interfaces: IHardwareListOverdueView, IHardwareListReplaceView, ISLICE6TreeView, IHardwareListSelectView, IHardwareListView, IHardwareListViewModel, IHardware, ISLICE6TreeNode.
  • DTS.Common.Controls — provides custom controls like GridViewColumnHeaderSearchable, GridViewColumnHeaderSelectable, Popup (SLICE6TreeViewPopup).
  • DTS.Common.Utils — utility methods: Utils.FindChild<T> (used in HardwareListSelectView and HardwareListView for tag resolution).
  • Prism.Ioc, Prism.Events — used in SLICE6TreeView to resolve IEventAggregator and publish PageModifiedEvent.

Consumed by:

  • The modules view model layer (IHardwareListViewModel implementations) — binds to these views via DataContext.
  • Likely the main hardware list module shell (e.g., Prism module initialization) — instantiates and hosts these views.

Gotchas

  • Typo in InitializeColumns parameter: The parameter is named bSteamingTest, likely intended to be bStreamingTest (note missing 'r'). This may cause confusion or mismatches in downstream code.
  • Ambiguous sort flag: All Sort(..., true) calls use a literal true. Without the interface definition or implementation, it is unclear whether this indicates ascending order, a toggle reset, or a secondary sort flag.
  • Redundant null checks: In HardwareListSelectView and HardwareListView, sender is cast to Control before checking control.DataContext. This is safe but verbose; could be simplified with pattern matching (e.g., if (sender is Control control && control.DataContext is IHardwareListViewModel vm)).
  • EventAggregator resolution in SLICE6TreeView: ContainerLocator.Container.Resolve<IEventAggregator>() is called synchronously on each Add_Click, Remove_Click, and Swap_Click. This is inefficient and violates Prism best practices (should be injected via constructor). No DI constructor is present, suggesting tight coupling to Prisms static locator.
  • Missing error handling: All click handlers silently return on failed casts (e.g., if (!(control.DataContext is IHardwareListViewModel vm)) { return; }). No logging or user feedback occurs if expectations are violated.
  • GetCurrentIndex logic: In HardwareListView, GetCurrentIndex iterates over all items and uses VisualTreeHelper.GetDescendantBounds and IsMouseOverTarget to determine the clicked item. This is computationally expensive for large lists and may be fragile if item containers are virtualized or not yet generated.

None identified from source alone.Not applicable; multiple gotchas found.