1

我有一个存储购买项目的表和在 NHibernate 中使用的实体类:

public class PurchasedItem
{
    public virtual int Id          { get; set; }
    public virtual Product Product { get; set; }
    public virtual int SortSale    { get; set; }
}

我想通过从PurchasedItems表(IList <PurchasedItem>对象)中获取所有记录来减少代码重复。记录已按SortSale列降序排序。WrapPanel基于IList <PurchasedItem>对象创建按钮的最佳方法是什么?我也想为每个按钮分配事件处理程序。该按钮显示带有产品名称的标题。

4

1 回答 1

4

您需要使用 WrapPanel 作为 ItemsPanel 创建一个列表框。在 XAML 中,您可以执行以下操作:

<ListBox Name="MyList" ItemsSource={StaticResource YourList}>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button Height="40" MinWidth="40" Content="{Binding Id}" Click="Button_Click"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

在此示例中,我假设 YourList 是 PurchasedItem 的列表。您还可以从代码中设置 ItemsSource(即:MyList.ItemsSource = YourList;)。当您单击按钮时,它会调用以下命令,它可以显示一个包含您需要的任何内容的消息框:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(((sender as Button).DataContext as PurchasedItem).Product.Name);
    }

请注意,我将 Button 的 Content 设置为 PurchasedItem 的 Id,因此您可能想要更改它。

于 2010-05-04T16:35:41.550 回答