Primary WPF APIs:
ItemsControl, ListView, DataGrid, TreeViewVirtualizingStackPanelPrimary Avalonia APIs:
ItemsControl, ListBox, TreeViewVirtualizingStackPanelAvalonia.Controls.DataGrid package for grid-specific UX| WPF | Avalonia |
|---|---|
ItemsControl |
ItemsControl |
ListView + GridView |
ListBox/ItemsControl + templated row grid |
DataGrid |
optional Avalonia.Controls.DataGrid package |
TreeView |
TreeView + TreeDataTemplate |
WPF XAML:
<ListView ItemsSource="{Binding Users}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Role" DisplayMemberBinding="{Binding Role}" />
</GridView>
</ListView.View>
</ListView>
Avalonia XAML:
<ListBox xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:MyApp.ViewModels"
x:DataType="vm:UsersPageViewModel"
ItemsSource="{CompiledBinding Users}">
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:UserRowViewModel">
<Grid ColumnDefinitions="2*,*" ColumnSpacing="12">
<TextBlock Grid.Column="0" Text="{CompiledBinding Name}" />
<TextBlock Grid.Column="1" Text="{CompiledBinding Role}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Optional DataGrid pattern:
<!-- Requires Avalonia.Controls.DataGrid package -->
<DataGrid xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:MyApp.ViewModels"
x:DataType="vm:UsersPageViewModel"
ItemsSource="{CompiledBinding Users}"
AutoGenerateColumns="False" />
using Avalonia.Controls;
var users = new ListBox { ItemsSource = viewModel.Users };
var tree = new TreeView { ItemsSource = viewModel.Nodes };
GridView convenience columns.
Grid templates or use DataGrid package.