动态创建WrapPanel按钮

时间:2010-05-04 15:57:17

标签: c# wpf nhibernate data-binding wrappanel

我有一个表存储购买的物品和使用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>按钮的最佳方法是什么?我也想为每个按钮分配事件处理程序。该按钮显示带有产品名称的标题。

1 个答案:

答案 0 :(得分: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的内容设置为PurchasedItem的Id,因此您可能希望更改它。