Skip to content

Commit 24a53d7

Browse files
committed
Update comparison doc to reflect MVVM data binding support
1 parent edc94a0 commit 24a53d7

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

docs/COMPARISON.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ var button = Controls.Button()
183183
|---|---|---|---|---|
184184
| **Approach** | Measure/Render | Pos/Dim with arithmetic | Flexbox + Grid + Dock | DOM pipeline (Measure/Arrange/Paint) |
185185
| **Containers** | Layout (grid cells) | View nesting | VStack, HStack, WrapStack, Grid, DockLayout, ZStack, Splitter, ScrollViewer | HorizontalGrid, ColumnContainer, ScrollablePanel |
186-
| **Reactive layout** | No | Computed Pos/Dim | **[Bindable] source-generated with dependency tracking** | Event-driven invalidation |
186+
| **Reactive layout** | No | Computed Pos/Dim | **[Bindable] source-generated with dependency tracking** | MVVM binding with auto-invalidation |
187187
| **Flexibility** | Low | High (Pos/Dim arithmetic) | **Very high (WPF/Avalonia-level)** | Moderate |
188188

189189
XenoAtom.Terminal.UI has the most sophisticated layout system with a proper `FlexAllocator` (grow/shrink/min/max like CSS Flexbox), full Grid with row/column definitions, and DockLayout. Terminal.Gui's Pos/Dim system with arithmetic composition is also very powerful. SharpConsoleUI's layout is simpler -- it prioritizes the compositor pipeline over layout complexity.
@@ -193,7 +193,7 @@ XenoAtom.Terminal.UI has the most sophisticated layout system with a proper `Fle
193193
| | Spectre.Console | Terminal.Gui v2 | XenoAtom.Terminal.UI | SharpConsoleUI |
194194
|---|---|---|---|---|
195195
| **API style** | Fluent builders | Property assignment | Property assignment + reactive bindings | **Fluent builders** |
196-
| **Data binding** | None | Manual / events | **Reactive [Bindable] with auto-invalidation** | Manual / events |
196+
| **Data binding** | None | Manual / events | **Reactive [Bindable] with auto-invalidation** | **MVVM with Bind/BindTwoWay** |
197197
| **Async support** | Limited (Progress) | Event-driven | Dispatcher-based | **Full async/await, per-window threads** |
198198
| **Plugin architecture** | No | No | No | **Yes (themes, controls, windows, services)** |
199199
| **Theming** | No built-in theming | JSON-based Scheme + VisualRole | Theme + 73 per-control style files | **Theme registry with runtime switching** |
@@ -225,7 +225,7 @@ Be honest about the right tool:
225225
- **Need maximum community and ecosystem?** The bigger libraries have more users, more contributors, more blog posts, and more StackOverflow answers.
226226
- **Targeting .NET 9 or older?** SharpConsoleUI requires .NET 9. Spectre.Console and Terminal.Gui v1 support .NET Standard 2.0. XenoAtom requires .NET 10.
227227
- **Need DatePicker, Slider, ColorPicker, or HexView?** Terminal.Gui has these built-in. XenoAtom has Slider and ColorPicker. SharpConsoleUI doesn't (yet).
228-
- **Need reactive data binding?** XenoAtom's `[Bindable]` source-generated property system with automatic dependency tracking is significantly more sophisticated than manual events.
228+
- **Need source-generated reactive bindings?** XenoAtom's `[Bindable]` source-generated property system with automatic dependency tracking is more sophisticated than SharpConsoleUI's lambda-based MVVM bindings.
229229

230230
## When SharpConsoleUI Shines
231231

@@ -236,6 +236,7 @@ SharpConsoleUI is the right choice when you need:
236236
- **Dashboard / monitoring tools** -- independent async window threads mean each panel updates on its own schedule without blocking the UI.
237237
- **IDE-like tools** -- [LazyDotIDE](https://github.com/nickprotop/LazyDotIDE) is a working .NET IDE built entirely on SharpConsoleUI, proving the framework handles complex, multi-window applications.
238238
- **Embedded terminal + UI** -- TerminalControl gives you a real PTY-backed terminal emulator inside a window, alongside your UI controls. Unique in the .NET ecosystem.
239+
- **MVVM data binding** -- `Bind()` and `BindTwoWay()` with lambda expressions, type converters, and standard `INotifyPropertyChanged` ViewModels. All controls support property change notification out of the box.
239240
- **Spectre.Console integration** -- use `[red bold]markup[/]` in every control, and embed any `IRenderable` (Tables, Charts, BarCharts) as a windowed control. Extends Spectre.Console rather than replacing it.
240241
- **Live data visualization** -- SparklineControl and BarGraphControl update in real-time with configurable styles.
241242
- **Plugin-based architectures** -- extend the framework with custom themes, controls, windows, and services.

0 commit comments

Comments
 (0)