Modernise your WinForms or WPF app Preview

For software houses with a desktop application that has to stay a desktop application: replace the DataGridView first, then panel by panel, then the shell. The business logic stays where it is, and the application ships the whole time.

Ask for a free pilot Read the technical guide

Everything on this page is part of ArionUI Core — open source under Apache-2.0 — and exists in 0.1.0-preview.1. It is a preview: the API still moves between versions.

No rewrite, no move to the web

A rewrite stops feature work for months and throws away tested business rules. A move to the web trades a desktop app your customers know for a new set of problems. ArionUI takes a third way: it goes into the existing window as ordinary controls — ArionGridControl and ArionControlSurface on WinForms, ArionGrid and ArionControlSurface on WPF — and each replaces one piece of the old window while the code around it keeps running.

The path: inside out

The order is fixed by the technique: ArionUI goes into an old window, but an old native control cannot go inside an ArionUI board. So the work starts where it usually hurts first.

  1. Swap the grid

    The DataGridView becomes an ArionGridControl on the same DataTable or BindingSource. Columns, the table's rules and the current row come along; the old event handlers stay.

  2. Then panel by panel

    A detail form, a filter bar, a figures panel becomes a board bound to a view model. It reads the old state and calls the old methods.

  3. Then the shell

    Side bar, header and status line become ArionUI. The old forms keep their place next to them until they are replaced too.

Before and after

Step one on a WinForms form with a DataGridView on a BindingSource over a DataTable. The table stays, the binding source stays, the handlers stay; one control changes.

Before: OrdersForm.cs
panelOrders.Controls.Add(new DataGridView { Dock = DockStyle.Fill, DataSource = orders });
After: OrdersForm.cs
var grid = new ArionGridControl
{
    Dock = DockStyle.Fill,
    DataSource = orders,                     // a DataTable, a DataView or a BindingSource over one
    VisualTheme = ArionTheme.FromSystem(),   // the window's colours and font
};
panelOrders.Controls.Add(grid);

// The old handlers stay. Only the event they hang on changes.
grid.Api.Events.RowActivated += item => OpenOrder((DataRowView)item);
grid.Api.CommandInputs.EditRefused += reason => toolStripStatus.Text = reason;
Part of the formBeforeAfter
DataDataTable and BindingSourceThe same objects, unchanged
ColumnsGenerated from the schemaGenerated from the schema, typed from each DataType
RulesA wrong value ends in the DataError eventThe table's rules refuse the value before the write; the reason comes through EditRefused
Current rowBindingSource.PositionFollows the position both ways, by row, also when the grid sorts
Event handlersOn the DataGridViewThe same methods, hung on the grid's events
LookClassic WinFormsDrawn by ArionUI, colours and font from the system

A side-by-side comparison of DataGridView and ArionGridControl on the same data is in preparation. It will appear here when it is measured — until then, no numbers.

The WinForms showcase window, dark theme: an ordinary Form whose side bar, header, status line, scene card and dashboard are all drawn by ArionUI. The WinForms showcase window, light theme: an ordinary Form whose side bar, header, status line, scene card and dashboard are all drawn by ArionUI.
Where the path ends: the showcase on WinForms is an ordinary Form with docked panels — every visible part is an ArionControlSurface or an ArionGridControl. Screenshot of the running app (0.1.0-preview.1).

What stays

The repository has a sample, samples/ArionUI.Sample.WinFormsModernize: a classic order form and the same form after each of the three steps, sharing one file of business logic. The guide walks through it.

Honest limits

The full list and the code for each step: Modernise a WinForms or WPF app in the documentation, and Limitations.

Pilot · free during the preview

We modernise one of your forms together with you

You have a WinForms or WPF application whose forms sit on a DataGridView, a DataTable or a BindingSource. Pick one form that hurts. We take it through the first steps with your developers — the grid on your own data, then a panel — and the code stays yours.

Ask for a pilot office@arionui.com — two lines on what the form does and what it runs on are enough.