Вопрос по wpf c#
Я хочу добавлять в лист сразу псевдоформу, пример на картинке, соответственно чтобы с ней можно было работать, взаимодействовать с кнопками, предоставляется ли это возможным? Вернее не так, иожно ли создать такой объект (псевдоформу), чтобы потом, просто создавая экземпляр данной формы добавлять его к пример в listView. 
Ответы (1 шт):
Используйте DataTemplate в ListBox:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate DataType="ваш тип для предмета">
<!--ваша XAML разметка для каждого элемента-->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Для отображения уникальных данных (отн. каждого элемента) можно использовать привязки:
...
<ListBox ItemSource="..." SelectedItem="..." SelectedItemIndex="...">
<ListBox.ItemTemplate>
<DataTemplate DataType="Item">
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
…где ItemsSource имеет значение след. типа:
ObservableCollection<Item>
…где Item – это:
public class Item
{
public string Text { get; set; }
}
В WPF нет ограничений на содержимое контролов – всё, что можно отобразить; т. е. вы можете запихнуть туда Grid, а в него уже ваш text с b1 и b2.
Подробнее о ItemTemplate и DataTemplate можно узнать здесь.
Сейчас все нормальные [обычные] приложения WPF используют паттерн MVVM. По ссылке прочитаете всю инфу, вот реализация:
MainViewModel.cs
public class MainViewModel : INotifyPropertyChanged
{
Item? selItem;
public ObservableCollection<Item> Items { get; }
public Item? SelectedItem // вообще нужно через `SelectedItemIndex`, но тоже работает
{
get => selItem;
set
{
selItem = value;
OnPropertyChanged("SelectedItem");
}
}
public event PropertyChangedEventHandler? PropertyChanged;
public MainViewModel()
{
Items = new ObservableCollection<Item>();
SelectedItem = null; // нет выделения // убрать: строчка чисто для разяснения
}
protected virtual void OnPropertyChanged(string propertyName) =>
PropertyChanged?.Invoke(this, propertyNa,e);
}
MainWindow.xaml.cs
MainViewModel vm;
public MainWindow()
{
vm = new MainViewModel();
DataContext = vm;
}
MainWindow.xaml
<Window ...>
<Grid>
<ListBox ItemSource="{Binding Items}" SelectedItem="{SelectedItem}">
<ListBox.ItemTemplate>
<DataTemplate DataType="Item">
<TextBlock Text="{Binding Text}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
Привязка – это просто копирование или создание ссылки на другие определённые данные. Значение привязывается ещё до отрисовки и обработки ввода (и даже раньше событий загрузки) (ссылка).