Files

85 lines
5.4 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- DataPRO/Modules/Database/DatabaseServices/Converters/DbTypeToVisibilityConverter.cs
generated_at: "2026-04-16T04:35:48.144608+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "b05fe9322ad19457"
---
# Converters
### **DbTypeToVisibilityConverter.cs Documentation**
---
#### **1. Purpose**
This module provides a WPF `IMultiValueConverter` implementation (`DbTypeToVisibilityConverter`) used to dynamically control the visibility of UI elements (e.g., menu items, buttons, or status bar controls) in the `DatabaseStatusBarView`, based on the current database configuration and connection state. It translates the combination of a `DbType` value and the current view context into a `Visibility` enum (`Visible` or `Collapsed`), enabling UI elements to be conditionally shown only when relevant to the active database mode (e.g., remote-only, local-only, or hybrid with/without remote connection).
---
#### **2. Public Interface**
- **`DbTypeToVisibilityConverter`**
- *Implements*: `System.Windows.Data.IMultiValueConverter`
- *Namespace*: `DatabaseServices.Converters`
- *Inherits*: `object`
- **`object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)`**
- **Signature**: `public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)`
- **Behavior**: Converts a two-element input array (`values`) into a `Visibility` value:
- `values[0]`: An `int` representing a `DbType` enum value (cast to `DbType`).
- `values[1]`: A `DatabaseStatusBarView` instance (used to access its `DataContext`, expected to be a `DatabaseStatusBarViewModel`).
- Returns `Visibility.Visible` if the `dbType` matches the visibility rules for the current `vm.DatabaseType` and `vm.RemoteConnected` state; otherwise returns `Visibility.Collapsed`.
- If `view.DataContext` is `null`, returns `Visibility.Collapsed`.
- Throws no exceptions explicitly, but may throw `InvalidCastException` if inputs are not of expected types.
- **`object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)`**
- **Signature**: `public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)`
- **Behavior**: Always throws `NotImplementedException`. This converter is one-way only.
---
#### **3. Invariants**
- `values` array **must** contain exactly two elements:
- Element 0: An `int` that can be safely cast to `DbType`.
- Element 1: A `DatabaseStatusBarView` instance (non-null).
- `view.DataContext` **must** be non-null and assignable to `DatabaseStatusBarViewModel`; otherwise, the converter returns `Visibility.Collapsed`.
- Visibility logic is strictly governed by the `DatabaseStatusBarViewModel.DatabaseType` and `DatabaseStatusBarViewModel.RemoteConnected` properties:
- For `RemoteOnly`: Only `DbType.RemoteOnly` is visible.
- For `LocalOnly`: Only `DbType.LocalOnly` is visible.
- For `RemoteLocalHybrid`:
- If `RemoteConnected == true`: Only `DbType.RemoteOnly` is visible.
- If `RemoteConnected == false`: Only `DbType.RemoteLocalHybrid` is visible.
- Any other `DatabaseType` value results in `Visibility.Collapsed`.
- The converter is **not** intended for two-way binding (`ConvertBack` is unimplemented).
---
#### **4. Dependencies**
- **Imports/References**:
- `System`, `System.Globalization`, `System.Windows`, `System.Windows.Data` (WPF core)
- `DTS.Common.Enums.Database` (external library/namespace) — provides `DbType` and likely `DatabaseStatusBarView`/`DatabaseStatusBarViewModel`.
- **Assumed Dependencies (from usage context)**:
- `DatabaseStatusBarView`: A WPF `UserControl` or `Window` used in the status bar.
- `DatabaseStatusBarViewModel`: View model with properties:
- `DatabaseType` (`DbType`)
- `RemoteConnected` (`bool`)
- `DbType` enum (from `DTS.Common.Enums.Database`) — expected to include at least: `RemoteOnly`, `LocalOnly`, `RemoteLocalHybrid`.
- **Depended upon by**:
- XAML bindings in `DatabaseStatusBarView` (or related views) where `MultiBinding` is used with this converter to toggle visibility based on database type and connection state.
---
#### **5. Gotchas**
- **Type safety**: Assumes `values[0]` is an `int` that maps to a valid `DbType` enum value. Passing a non-integer or out-of-range value may cause `InvalidCastException` at runtime.
- **Null safety**: Relies on `view.DataContext` being non-null; otherwise, silently returns `Collapsed`. No logging or error handling is present.
- **Hybrid mode logic is conditional**: In `RemoteLocalHybrid` mode, visibility depends on `RemoteConnected`, but the converter does **not** handle cases where `RemoteConnected` is `false` and `dbType == DbType.RemoteOnly` — such cases correctly collapse, but this may be counterintuitive if the UI expects hybrid elements to always show.
- **No support for `parameter`**: The `parameter` argument (often used to customize converter behavior in XAML) is ignored.
- **One-way only**: `ConvertBack` throws `NotImplementedException`, so this converter cannot be used in two-way bindings.
- **No validation of `DbType` values**: Unknown `DbType` values (e.g., future enum additions) fall through to `default: return Visibility.Collapsed`, which may hide UI elements unexpectedly.
None identified beyond these.