2010-05-04 5 views
1

У меня есть таблица хранения приобретенных товаров и класса объектов с использованием в NHibernate:Динамического создания кнопок WrapPanel

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

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

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

Обратите внимание, что я установить содержание Баттона к идентификатору PurchasedItem так что вы, вероятно, хотите изменить это.

Смежные вопросы