Динамическое создание кнопок WrapPanel - PullRequest
1 голос
/ 04 мая 2010

У меня есть таблица, в которой хранятся купленные предметы и класс сущностей в 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 Ответ

4 голосов
/ 04 мая 2010

Вам необходимо создать список, используя 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 является списком покупаемых элементов. Вы также можете установить ItemsSource из кода (то есть: MyList.ItemsSource = YourList;). Когда вы нажмете кнопку, она вызовет следующее, которое может отобразить окно сообщения, содержащее все, что вам нужно:

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

Обратите внимание, что для Контента кнопки я установил Id для элемента PurchaseagedItem, поэтому вы, вероятно, захотите изменить это.

...