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}");
    }
}

运行效果

image

 

posted on 2026-02-09 04:17  dalgleish  阅读(6)  评论(0)    收藏  举报