Звучит так, будто ты хочешь попасть в чудесный мир DataTemplates
сначала мы создадим класс контейнера для ваших данных
public class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
public Person(string first, string last)
{
FirstName = first;
LastName = first;
}
}
Затем в коде вашего элемента хостинга (возможно, окна). Вы можете объявить и ObservableCollection<>
об объектах.
//populate me wherever!
public ObservableCollection<Person> People {get;set;}
(не забывайте инициализировать это где-нибудь, чтобы избежать всевозможных ненужных исключений)
Затем вы можете связать коллекцию с коллекцией предметов, мне нравится ItemsControl
<ItemsControl ItemsSource="{Binding Path=People}"/>
За исключением того, что это не дает желаемого результата. Поэтому, хотя мы можем переопределить ToString()
нашего класса, чтобы выплевывать некоторые отформатированные данные, мы можем сделать это лучше, переопределив шаблон элемента элемента управления items.
<ItemsControl ItemsSource="{Binding Path=People}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button DataContext="{Binding}" Click="Button_Click">
<Button.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{1}, {0}">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Button.Content>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Обратите внимание, что для правильного форматирования текста на кнопках я использую мультисвязывание со средством форматирования строки.
Теперь с помощью кнопок Click
Обработчик событий вы можете обработать элемент. Поскольку Sender
события будет кнопкой, а DataContext
кнопки будет лицом объекта, который он представляет, вы можете делать то, что хотите.
Вы также можете найти свойство ListBox
и его SelectedItem
очень полезным в вашем конкретном случае.
Надеюсь, этого достаточно, чтобы начать, -Val