2016-07-03 57 views
0

我知道,我應該以刪除DataGrid中連續使用PreviewKeyDown事件,所以我有這樣的代碼在UI:如何從WPF中的DataGrid控件中刪除一行?

<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 
      } 
     } 
    } 
} 

我有這樣的代碼視圖模型:

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"); 
     } 
    } 
} 

和模型類我有身份證,城市和鄉村的屬性:

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?我不明白。

回答

1

DataGrid.SelectedItems屬性是不通用的,它只是IListrowobject型,除非確切類型指定這樣的:

foreach (Place row in dgPlaces.SelectedItems) 
{ 

} 
+0

它的工作原理。謝啦! :) – vvasovic