解決されたようですが、閲覧者向けにタイトルを回収しておきます。
本来ListView
とDataGrid
は役割が違います。
表示するだけならListView
でいいですし、項目の編集をするならDataGrid
です。
xml
1<Window
2 x:Class="Questions314032.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 Width="800"
6 Height="450">
7 <Grid>
8 <ListView ItemsSource="{Binding People}">
9 <ListView.View>
10 <GridView>
11 <GridViewColumn DisplayMemberBinding="{Binding Id}" Header="ID" />
12 <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="名前" />
13 <GridViewColumn Header="削除">
14 <GridViewColumn.CellTemplate>
15 <DataTemplate>
16 <Button Content="削除" Click="Button_Click" />
17 </DataTemplate>
18 </GridViewColumn.CellTemplate>
19 </GridViewColumn>
20 </GridView>
21 </ListView.View>
22 </ListView>
23 </Grid>
24</Window>
cs
1using System.Collections.ObjectModel;
2using System.Windows;
3using System.Windows.Controls;
4
5namespace Questions314032
6{
7 public class Person
8 {
9 public int Id { get; }
10 public string Name { get; }
11 public Person(int id, string name) => (Id, Name) = (id, name);
12 }
13
14 public partial class MainWindow : Window
15 {
16 public ObservableCollection<Person> People { get; }
17 public MainWindow()
18 {
19 InitializeComponent();
20 DataContext = this;
21
22 People = new()
23 {
24 new(1, "田中"),
25 new(2, "佐々木"),
26 };
27 }
28
29 private void Button_Click(object sender, RoutedEventArgs e)
30 {
31 if (sender is Button button)
32 {
33 People.Remove((Person)button.DataContext);
34 }
35 }
36 }
37}
特に指定がないので.NET 5.0で書きました^^
.NET Framework 4.8等では、new()でエラーが出るので型を書いてください。
Target-typed new expressions - C# 9.0 specification proposals | Microsoft Docs
ターゲットからの new 型推論 | ++C++; // 未確認飛行 C