DataTemplateControls.axaml代码
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="341" Width="288" xmlns:local="using:AvaloniaUI.Demos.Book._19.StoreDatabase" x:Class="AvaloniaUI.DataTemplateControls" Title="DataTemplateControls"> <Grid RowDefinitions="auto,*"> <ListBox Grid.Row="1" Margin="10" x:Name="lstCategories" HorizontalAlignment="Stretch"> <ListBox.ItemTemplate> <DataTemplate x:DataType="local:Product"> <Grid Margin="3" ColumnDefinitions="*,auto"> <TextBlock VerticalAlignment="Center" Text="{Binding CategoryName}" /> <Button Grid.Column="1" Padding="2" Click="cmdView_Clicked" Tag="{Binding .}"> View ... </Button> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid> </Window>
DataTemplateControls.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using AvaloniaUI.Demos.Book._19.StoreDatabase;
using Shares.Avalonia;
using System;
namespace AvaloniaUI;
public partial class DataTemplateControls : Window
{
private StoreDb1 db = new StoreDb1();
public DataTemplateControls()
{
InitializeComponent();
lstCategories.ItemsSource = db.GetProducts();
}
private void cmdView_Clicked(object? sender, RoutedEventArgs e)
{
if (sender is not Button btn)
return;
if (btn.Tag is not Product product)
return;
MessageBox.Show(this, $"You chose category #{product.CategoryId}: {product.CategoryName}");
}
}
运行效果

浙公网安备 33010602011771号