--- source_files: - Common/DTS.Common/Interface/ISO/ExtraProperties/IExtraPropertiesListView.cs - Common/DTS.Common/Interface/ISO/ExtraProperties/IExtraPropertiesListViewModel.cs - Common/DTS.Common/Interface/ISO/ExtraProperties/IExtraProperty.cs generated_at: "2026-04-16T03:06:05.680006+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "fa52f93f74894066" --- # ExtraProperties ## Documentation: Extra Properties List Module --- ### 1. Purpose This module defines the interface contracts for managing a list of *extra properties*—custom key-value metadata associated with data objects in the ISO data processing pipeline. It provides a standardized view-model and view layer abstraction for displaying, editing, filtering, sorting, and manipulating these properties in a UI (likely WPF, given `ICommand` and `ObservableCollection`). The module exists to decouple UI logic for extra properties from domain-specific implementations, enabling reuse across different ISO data entry or review workflows. --- ### 2. Public Interface #### `IExtraPropertiesListView` - **Inherits**: `IBaseView` - **Description**: A marker interface for the view (e.g., XAML user control) that renders the extra properties list. No additional members are defined here; behavior is driven entirely by the view model. #### `IExtraPropertiesListViewModel` - **Inherits**: `IBaseViewModel` - **Methods & Properties**: - `void SetPage(IDataPROPage page)` Sets the data context page (likely representing a step or section in a data entry workflow) for the list. - `void SetParent(object parent)` Assigns a parent object (e.g., a container or parent view model) for navigation or coordination. - `IExtraPropertiesListView View { get; set; }` Gets or sets the associated view instance (MVVM pattern binding). - `void CopySelected()` Copies currently selected extra properties to the clipboard (likely in a structured format like CSV or tab-delimited). - `void DeleteSelected()` Removes the selected extra properties from the list. - `ObservableCollection ExtraProperties { get; set; }` The collection of extra properties displayed in the list; supports change notification. - `void SetExtraProperties(IList properties)` Replaces the current `ExtraProperties` collection with a new list of properties. - `void Filter(object tag, string term)` Filters the list based on `term` (search string), optionally scoped by `tag` (e.g., column or category identifier). - `void Sort(object o, bool columnClick)` Sorts the list, where `o` likely identifies the sort key (e.g., column header), and `columnClick` indicates if triggered by UI interaction. - `bool Validate(ref List errors)` Validates all extra properties in the list; returns `false` and populates `errors` if any validation failures occur. - `bool IsReadOnly { get; set; }` Controls whether the list is editable (`true` = read-only, `false` = editable). - `IExtraProperty[] SelectedProperties { get; }` Returns an array of currently selected extra properties (read-only; no setter). #### `IExtraProperty` - **Inherits**: `INotifyPropertyChanged` - **Properties & Commands**: - `string Key { get; set; }` The property’s name/key (e.g., `"Manufacturer"`, `"BatchID"`). - `string Value { get; set; }` The property’s value (e.g., `"Acme Corp"`, `"B-2024-001"`). - `ICommand PasteCommand { get; set; }` A command invoked when pasting data (e.g., multi-row CSV) into a single field. Handles parsing and splitting into multiple properties. - `UIItemStatus ItemStatus { get; set; }` Indicates UI validation status (e.g., `Success`, `Failed`, `Warning`)—values defined in `DTS.Common.Enums.UIItemStatus`. --- ### 3. Invariants - `ExtraProperties` must be an `ObservableCollection`; direct replacement via `SetExtraProperties` must trigger collection change notifications. - `SelectedProperties` is read-only and reflects the *current* selection state at the time of access (no guarantee of immutability beyond the array copy). - `IsReadOnly` applies globally to all properties in the list; when `true`, edits to `Key`/`Value` should be blocked. - `Validate` must inspect *all* properties in `ExtraProperties` and return `false` if any property fails validation (e.g., empty `Key`, invalid `ItemStatus`). - `PasteCommand` is expected to handle multi-row input (e.g., newline- or comma-separated values) and may create/modify multiple `IExtraProperty` instances. - `Filter` and `Sort` operations must operate on the *current* `ExtraProperties` collection without mutating the underlying data source (unless explicitly intended). --- ### 4. Dependencies #### This module depends on: - `DTS.Common.Base` (for `IBaseView`, `IBaseViewModel`) - `DTS.Common.Enums` (for `UIItemStatus`) - Standard .NET types: `System.Collections.ObjectModel.ObservableCollection`, `System.ComponentModel.INotifyPropertyChanged`, `System.Windows.Input.ICommand` #### This module is depended upon by: - UI components implementing `IExtraPropertiesListView` (e.g., WPF user controls). - View models or services that manage ISO data pages (e.g., `IDataPROPage` implementations) requiring extra property editing. - Concrete implementations of `IExtraProperty` (e.g., `ExtraProperty` class in a derived project). --- ### 5. Gotchas - **No explicit thread-safety guarantees**: `ObservableCollection` is not thread-safe; UI updates must occur on the UI thread. - **`SetExtraProperties` vs. `ExtraProperties`**: Replacing the collection via `SetExtraProperties` may reset selection state (not specified). Consumers should re-select items if needed. - **`Filter` and `Sort` signatures are ambiguous**: `object tag` and `object o` are not typed—likely `string` or `DataGridColumn` in practice, but the interface does not enforce this. - **`PasteCommand` behavior is implementation-defined**: While documented as handling multi-row pastes, the exact parsing logic (e.g., delimiters, row/column mapping) is not standardized here. - **`SelectedProperties` returns an array**: Calling code must not assume the array is a live view; it is a snapshot. - **No error handling contract**: `Validate` populates `errors`, but the interface does not specify whether partial failures are allowed or if validation stops on the first error. None identified beyond the above.