init
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
---
|
||||
source_files:
|
||||
- DataPRO/Modules/TestSetups/TestSetupsList/View/TestSetupsListView.xaml.cs
|
||||
generated_at: "2026-04-16T04:51:42.688811+00:00"
|
||||
model: "Qwen/Qwen3-Coder-Next-FP8"
|
||||
schema_version: 1
|
||||
sha256: "41a808b797fa9251"
|
||||
---
|
||||
|
||||
# View
|
||||
|
||||
### **1. Purpose**
|
||||
This module implements the WPF view layer (`TestSetupsListView`) for the test setups list UI component. It serves as the concrete implementation of the `ITestSetupsListView` interface, handling user interactions such as column header clicks (for sorting), searchable column header events (for filtering), and double-clicks on list items (to trigger a view-model action). It bridges the UI (defined in `TestSetupsListView.xaml`) with the view model (`ITestSetupsListViewModel`) by translating WPF events into structured view-model method calls.
|
||||
|
||||
---
|
||||
|
||||
### **2. Public Interface**
|
||||
The class itself is public and implements `ITestSetupsListView`, but the source file does **not expose any public methods or properties beyond the constructor**. All behavior is implemented via private event handlers wired in XAML (not shown). The public interface is therefore:
|
||||
|
||||
- **`TestSetupsListView()`**
|
||||
Public constructor. Calls `InitializeComponent()` to load the XAML-defined UI. This is the standard WPF entry point for initializing the view.
|
||||
|
||||
> **Note**: All interaction logic resides in *private* event handlers (`ListViewHeader_Click`, `GridViewColumnHeaderSearchable_OnSearch`, `GridViewColumnHeader_OnClick`, `MouseDoubleClick`). These are invoked via XAML event bindings and are not directly callable from outside the class.
|
||||
|
||||
---
|
||||
|
||||
### **3. Invariants**
|
||||
- The `DataContext` of the `ListView` (and thus the view) **must** be an instance implementing `ITestSetupsListViewModel`. This is assumed by all event handlers (e.g., `vm?.Sort(...)`, `vm.Filter(...)`, `vm.MouseDoubleClick(...)`).
|
||||
- Column headers used for sorting **must** have their `Tag` property set to a valid sort key (typically a string or enum representing the column/field).
|
||||
- For searchable column headers, the `Tag` property must be set to identify the column for filtering, and the `GridViewColumnHeaderSearchable` type must be used (from `DTS.Common.Controls`).
|
||||
- The `MouseDoubleClick` handler assumes the `ListView` contains items in a one-to-one mapping with indices; it uses `ItemContainerGenerator.ContainerFromIndex` to resolve the visual item under the mouse.
|
||||
|
||||
---
|
||||
|
||||
### **4. Dependencies**
|
||||
**Imports/References (from source):**
|
||||
- `System.Windows.*` (WPF core: `Window`, `Controls`, `Data`, `Media`, `Input`)
|
||||
- `DTS.Common.Controls` (provides `GridViewColumnHeaderSearchable`, `Utils.FindChild<T>`)
|
||||
- `DTS.Common.Interface.TestSetups.TestSetupsList` (provides `ITestSetupsListView`, `ITestSetupsListViewModel`)
|
||||
- `DTS.Common.Utils` (provides utility methods like `Utils.FindChild<T>`)
|
||||
|
||||
**Depended on by:**
|
||||
- XAML (`TestSetupsListView.xaml`) — binds events to the private handlers.
|
||||
- The view model (`ITestSetupsListViewModel` implementation) — must be assigned to `DataContext` for the view to function.
|
||||
- Likely consumed by a parent view or navigation system that instantiates `TestSetupsListView` as a control.
|
||||
|
||||
---
|
||||
|
||||
### **5. Gotchas**
|
||||
- **Ambiguous event routing**: Two handlers (`ListViewHeader_Click` and `GridViewColumnHeader_OnClick`) appear to handle column header clicks. `ListViewHeader_Click` assumes `e.OriginalSource` is a `GridViewColumnHeader`, while `GridViewColumnHeader_OnClick` uses `sender as GridViewColumnHeaderSearchable` and falls back to `Utils.FindChild<GridViewColumnHeaderSearchable>`. This suggests legacy or overlapping event wiring—caution is needed to avoid duplicate sorting/filtering logic.
|
||||
- **Null-safety reliance**: The `MouseDoubleClick` handler uses `vm?.Sort(...)` and similar null-conditional operators, implying `DataContext` may sometimes be `null`. However, the view is likely unusable without a valid view model.
|
||||
- **Index resolution fragility**: `GetCurrentIndex` iterates over `lv.Items.Count`, calling `ContainerFromIndex`—which may return `null` for virtualized or not-yet-realized items. This could cause double-clicks near the edge of the viewport to be missed.
|
||||
- **Search handler signature mismatch**: `GridViewColumnHeaderSearchable_OnSearch` casts `e.OriginalSource` to `string` for `searchTerm`, but `RoutedEventArgs.OriginalSource` is typically a UI element (e.g., a `TextBox` or `ComboBox`). This suggests the XAML passes the search term via `CommandParameter` or similar, but the cast is unsafe and likely incorrect unless the event is routed from a custom control.
|
||||
- **No public API for programmatic control**: The view offers no methods to programmatically trigger sorting/filtering—only via user interaction. This limits testability and integration flexibility.
|
||||
- **Missing documentation**: The class inherits XML doc from `ITestSetupsListView`, but the interface itself is not included—behavioral details of `Sort`, `Filter`, and `MouseDoubleClick` are inferred from usage, not defined here.
|
||||
Reference in New Issue
Block a user