Перейти к основному содержимому
Версия: 11.0.0

Data Templates (рус: Шаблоны Данных)

В Avalonia UI, шаблоны данных не хранятся внутри ресурсов приложения. (Это верно и для стилей, см. здесь.)

Вместо этого, шаблоны данных помещаются в коллекцию DataTemplates у Control, или внутрь ... (и в Application):

К примеру, указанный ниже код, добавит шаблон данных для отображения данных класса MyViewModel:

<UserControl xmlns:viewmodels="using:MyApp.ViewModels"
x:DataType="viewmodels:ControlViewModel">
<UserControl.DataTemplates>
<DataTemplate DataType="viewmodels:FooViewModel">
<Border Background="Red" CornerRadius="8">
<TextBox Text="{Binding Name}"/>
</Border>
</DataTemplate>
</UserControl.DataTemplates>
<!-- Assuming that ControlViewModel.Foo is an object of type
MyApp.ViewModels.FooViewModel then a red border with a corner
radius of 8 containing a TextBox will be displayed here.
DataType is required only if you use Compiled Bindings, so it can be type-checked. -->
<ContentControl Content="{Binding Foo}"/>
<UserControl>

В Avalonia, шаблоны данных могут привязываться к интерфейсам и производным классам, чего нельзя сделать в WPF. По этой причине, в DataTemplate важен порядок при использовании вложенных данных (также, как вы сделали бы это в коде).

Data Template Selector (рус: Селектор Шаблона Данных)

В WPF, вы можете использовать DataTemplateSelector для выбора или создания DataTemplate на основе проброшенных данных. В Avalonia так сделать нельзя, но вы можете реализовать IDataTemplate, который можно рассматривать как хороший аналог DataTemplateSelector. Пример см. здесь.