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

62 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
source_files:
- DataPRO/Modules/Realtime/RealtimeModule/View/RealtimeChannelSelectView.xaml.cs
generated_at: "2026-04-16T04:48:08.293076+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "6ca4c92ee0b7d299"
---
# View
## Documentation: `RealtimeChannelSelectView`
### 1. Purpose
`RealtimeChannelSelectView` is a WPF UI view responsible for rendering and managing user interaction with a channel selection control in the Realtime module. It implements the `IRealtimeChannelSelectView` interface and coordinates with its associated view model (`IRealtimeChannelSelectViewModel`) to handle search input and channel selection. Its role is to translate user actions (text input and selection changes in a `ComboBox`) into corresponding view model operations, enabling users to search for and select a real-time data channel.
### 2. Public Interface
The class itself is not a public API in the traditional sense (it is `partial` and tied to XAML), but it implements the `IRealtimeChannelSelectView` interface (from `DTS.Common.Interface.Realtime`). Since the interface definition is not provided in the source, only the *publicly exposed behavior* (via event handlers) is documented:
- **`RealtimeChannelSelectView()`**
Constructor. Initializes the component by calling `InitializeComponent()` to wire up XAML-defined elements.
- **`private void Search_TextChanged(object sender, TextChangedEventArgs e)`**
Event handler for `TextBox.TextChanged` (or equivalent `ComboBox.Text` change). Updates the view models search text via `vm.SetSearchText(cb.Text)`, ensures the dropdown remains open (`cb.IsDropDownOpen = true`), and does not modify selection state directly.
- **`private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)`**
Event handler for `ComboBox.SelectionChanged`. When an item is selected:
- Casts the selected item to `IRealtimeChannel`.
- Informs the view model via `vm.SetRealtimeChannel(channel)`.
- Clears the selection (`cb.SelectedItem = null`), resets the search text (`vm.SetSearchText("")`), and closes the dropdown (`cb.IsDropDownOpen = false`).
> ⚠️ Note: No other public methods or properties are defined in this file. All logic resides in private event handlers.
### 3. Invariants
- The `DataContext` of the `ComboBox` must always be an instance implementing `IRealtimeChannelSelectViewModel`.
- The selected item in the `ComboBox` must be an instance of `IRealtimeChannel`.
- After a channel is selected, the view model is guaranteed to receive:
1. `SetRealtimeChannel(channel)`
2. `SetSearchText("")`
- The `ComboBox` dropdown is explicitly kept open during text input (`Search_TextChanged`) and closed after selection (`ComboBox_SelectionChanged`).
- Selection is cleared (`SelectedItem = null`) after handling to prevent re-triggering on the same item.
### 4. Dependencies
- **External Interfaces**:
- `DTS.Common.Interface.Realtime.IRealtimeChannel` — Represents a real-time channel.
- `DTS.Common.Interface.Realtime.IRealtimeChannelSelectView` — The interface this class implements (inferred from `inheritdoc`).
- `DTS.Common.Interface.Realtime.IRealtimeChannelSelectViewModel` — The expected type of `DataContext`.
- **WPF Framework**:
- `System.Windows.Controls.ComboBox`, `System.Windows.Controls.TextChangedEventArgs`, `System.Windows.Controls.SelectionChangedEventArgs`.
- **Inferred Usage**:
- This view is consumed by XAML (likely `RealtimeChannelSelectView.xaml`) and bound to a view model implementing `IRealtimeChannelSelectViewModel`.
- The view model likely depends on other parts of the Realtime module (e.g., channel discovery, data subscription logic), but those are not visible here.
### 5. Gotchas
- **Selection clearing side effect**: `cb.SelectedItem = null` is set *after* calling `vm.SetRealtimeChannel(channel)`, which may be necessary to avoid re-selection loops, but could cause issues if the view model expects the selection to persist during its processing.
- **Search text reset**: `vm.SetSearchText("")` is called *after* channel selection, not during text input. This means the search text is cleared only upon selection, not on every keystroke.
- **Commented-out state flag**: A `volatile bool _bHandleSelection` field is commented out, suggesting a past attempt to prevent re-entrancy or double-handling of selection events. Its absence may indicate unresolved reentrancy risks or legacy tech debt.
- **No null-safety for `cb.SelectedItem` beyond `null` check**: The handler assumes `cb.SelectedItem` is castable to `IRealtimeChannel` if non-null; no validation is performed.
- **Assumes `cb.DataContext` is always `IRealtimeChannelSelectViewModel`**: No null-check on `vm` is performed before calling methods on it, risking `NullReferenceException` if binding is misconfigured.
- **No explicit handling of deselection**: If `SelectedItem` becomes `null` via external means (e.g., programmatic reset), the handler does nothing — this may be intentional, but is not documented.
None identified beyond the above.