--- source_files: - Common/DTS.CommonCore/Interface/DTS.Viewer/Menu/IMenuView.cs - Common/DTS.CommonCore/Interface/DTS.Viewer/Menu/IMenuViewModel.cs generated_at: "2026-04-16T02:32:59.510070+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "f8804451d31ebe71" --- # Menu ## 1. Purpose This module defines the core interfaces for the menu layer in the DTS Viewer component, establishing a contract between the view and view model following the MVVM (Model-View-ViewModel) pattern. It extends base abstractions (`IBaseView`, `IBaseViewModel`) to provide a minimal, focused interface hierarchy specifically for menu-related UI concerns—enabling separation of concerns, testability, and decoupled UI implementation while maintaining consistency with the broader codebase’s architectural patterns. ## 2. Public Interface - **`IMenuView`** *Signature:* `public interface IMenuView : IBaseView` *Behavior:* Represents the view layer for menu UI. It inherits from `IBaseView`, implying it adheres to the base view contract (e.g., lifecycle, binding context), but contains no additional members beyond inheritance. Its purpose is to serve as a typed marker interface for menu-specific views. - **`IMenuViewModel`** *Signature:* `public interface IMenuViewModel : IBaseViewModel` *Behavior:* Represents the view model for menu logic. It exposes a single read-only property `View` of type `IMenuView`, providing access to the associated view instance. This enables the view model to interact with or query the view when necessary (e.g., for coordination, state synchronization, or view-specific operations), while still maintaining separation of concerns. ## 3. Invariants - `IMenuView` must be implemented by any concrete class serving as the menu UI view. - `IMenuViewModel` implementations must provide a non-null `View` property referencing an instance of a type that implements `IMenuView`. - The `View` property in `IMenuViewModel` is expected to be set during initialization and remain stable for the lifetime of the view model (though not explicitly enforced by the interface). - Both interfaces extend `IBaseView` and `IBaseViewModel` respectively, inheriting all invariants and contracts defined in those base interfaces (not shown here, but assumed to be part of the `DTS.Common.Base` namespace). ## 4. Dependencies - **Depends on:** - `DTS.Common.Base` (specifically `IBaseView` and `IBaseViewModel`) - **Depended on by (inferred):** - Concrete implementations of `IMenuView` (e.g., WPF/WinForms/Xamarin UI controls) - Concrete implementations of `IMenuViewModel` (e.g., menu logic classes) - Framework or DI containers that resolve menu-related view/view model pairs - Higher-level components (e.g., shell or navigation services) that coordinate menu UI with other parts of the viewer ## 5. Gotchas - The interfaces are intentionally minimal—`IMenuView` has no members beyond inheritance, and `IMenuViewModel` only exposes the `View` property. Developers should not expect built-in command, data binding, or event handling contracts here; those would be defined in derived interfaces or concrete classes. - The `View` property in `IMenuViewModel` is not initialized by the interface itself; implementations must ensure it is set (likely via constructor or property injection) to avoid `NullReferenceException` at runtime. - No guidance is provided on how view/view model pairing is established (e.g., via DI, factory, or manual wiring), which may lead to inconsistency across implementations. - None identified from source alone.