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

4.1 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
Common/DTS.Common/Interface/DTS.Viewer/Navigation/INavigationView.cs
Common/DTS.Common/Interface/DTS.Viewer/Navigation/INavigationViewModel.cs
2026-04-16T03:07:38.322183+00:00 Qwen/Qwen3-Coder-Next-FP8 1 2a3c86a0916b7d5f

Navigation

1. Purpose

This module defines the foundational interfaces for navigation-related view and view model components within the DTS Viewer subsystem. Specifically, INavigationView and INavigationViewModel establish a contract for navigation UI layers, enforcing a separation of concerns where the view (UI layer) is bound to a view model (logic/data layer), with the view model exposing a reference back to its associated view. These interfaces extend base abstractions (IBaseView, IBaseViewModel) to integrate into a larger MVVM (Model-View-ViewModel) architecture, enabling consistent navigation state management and view coordination.

2. Public Interface

INavigationView

  • Signature: public interface INavigationView : IBaseView { }
  • Behavior: Represents the UI layer for navigation functionality. It inherits from IBaseView, implying it adheres to the base view contract (e.g., lifecycle, binding context, or rendering responsibilities), but contains no additional members itself. Its purpose is to serve as a typed marker interface for navigation-specific views.

INavigationViewModel

  • Signature: public interface INavigationViewModel : IBaseViewModel
    • Property: INavigationView NavigationView { get; }
  • Behavior: Represents the view model for navigation logic. It exposes a read-only property NavigationView that provides access to the associated INavigationView instance. This enables the view model to interact with or query the view (e.g., for navigation commands, state updates, or coordination), while maintaining loose coupling through the interface.

3. Invariants

  • INavigationView must be implemented by a concrete view class (e.g., a XAML page or control) that participates in the navigation flow.
  • INavigationViewModel must be implemented by a view model class that maintains a reference to an instance of a type implementing INavigationView.
  • The NavigationView property in INavigationViewModel must return a non-null reference to the view instance it is bound to (or has been associated with) during the view-model/view lifecycle.
  • Both interfaces extend their respective base interfaces (IBaseView, IBaseViewModel), so all invariants of those base interfaces (e.g., binding context requirements, disposal patterns) apply transitively.

4. Dependencies

  • Depends on:
    • DTS.Common.Base.IBaseView (via INavigationView)
    • DTS.Common.Base.IBaseViewModel (via INavigationViewModel)
  • Depended on by:
    • Concrete implementations of navigation views (e.g., ShellView, MainMenuView) will implement INavigationView.
    • Concrete navigation view models (e.g., ShellViewModel, NavigationViewModel) will implement INavigationViewModel.
    • Other modules (e.g., navigation service, shell host, or region manager) likely depend on INavigationViewModel to access or coordinate the navigation UI.
  • Note: The source files do not specify concrete consumers, but the design strongly suggests usage in a view model locator or navigation framework (e.g., Prism, MVVM Light, or custom).

5. Gotchas

  • The interfaces are intentionally minimal and serve as marker interfaces—they convey semantic meaning (navigation context) but no behavior. Consumers must rely on other mechanisms (e.g., commands, events, or additional interfaces) for actual navigation logic.
  • The NavigationView property in INavigationViewModel is read-only, implying the view reference is set once (e.g., during view-model initialization or binding) and not expected to change. Reassignment may break assumptions in consuming code.
  • No explicit thread-safety or lifecycle guarantees are defined for the NavigationView reference; callers should assume it is valid only during the active lifetime of the view/view-model pair.
  • None identified from source alone.