C# 动态创建包装按钮

C# 动态创建包装按钮,c#,wpf,nhibernate,data-binding,wrappanel,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对象)获取所有记录

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

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

我希望通过从
PurchasedItems
表(
IList
对象)获取所有记录来减少代码重复。记录已按
SortSale
列按降序排序。基于
IList
对象创建
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>

请注意,我将按钮的内容设置为PurchasedItem的Id,因此您可能需要更改它。

您需要使用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>
请注意,我将按钮的内容设置为PurchasedItem的Id,因此您可能希望对此进行更改