如何在WPF中从DataGrid控件中删除一行

本文关键字:删除 一行 控件 WPF 中从 DataGrid | 更新日期: 2023-09-27 17:54:30

我知道我应该使用PreviewKeyDown事件,以便在DataGrid中删除一行,所以我在UI中有以下代码:

<DataGrid Name="dgPlaces"
            AutoGenerateColumns="True"
            ItemsSource="{Binding Places}"
            PreviewKeyDown="dgPlaces_PreviewKeyDown"
    />

然后我在代码后面有这段代码:

private void dgPlaces_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        if (dgPlaces.SelectedItems.Count > 0)
        {
            foreach (var row in dgPlaces.SelectedItems)
            {
                //here should be delete logic for each row
            }
        }
    }
}

我在ViewModel中有以下代码:

public class ViewModel //: INotifyPropertyChanged
{
    public ViewModel()
    {
    }
    private ObservableCollection<Place> places = new ObservableCollection<Place>()
    {
        new Place { Id = 1, City = "New York", Country = "US" },
        new Place { Id = 2, City = "Chicago", Country = "US" },
        new Place { Id = 3, City = "Miami", Country = "US" }
    };
    public ObservableCollection<Place> Places
    {
        get
        {
            return places;
        }
        set
        {
            places = value;
            RaisePropertyChanged("Places");
        }
    }
}

在Model类中我有Id, City和Country属性:

public class Place
{
    public int Id { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

我的问题与代码隐藏文件内的循环有关:如何从行中提取Id,以便应用程序可以知道应该删除哪一行?

foreach (var row in dgPlaces.SelectedItems)
{
    //here should be delete logic for each row
}

为什么我不能把。一行之后,然后从智能感知得到Id ?我不明白。

如何在WPF中从DataGrid控件中删除一行

DataGrid.SelectedItems属性是非通用的,它只有IList, row具有object类型,除非像这样指定确切的类型:

foreach (Place row in dgPlaces.SelectedItems)
{
}