如何在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 ?我不明白。
DataGrid.SelectedItems
属性是非通用的,它只有IList
, row
具有object
类型,除非像这样指定确切的类型:
foreach (Place row in dgPlaces.SelectedItems)
{
}