【问题标题】:How to delete row from DataGrid with Delete key如何使用 Delete 键从 DataGrid 中删除行
【发布时间】:2016-04-03 17:01:40
【问题描述】:

我有一个DataGrid,里面有一些记录。我想要的是,当我按下键盘上的 Delete 键时,该行被删除,甚至集合中的记录也被删除。

我认为参数 CanUserDeleteRows 可以解决问题,但它不起作用。当我按删除时,该行消失,但仍保留在集合中。

这是我的DataGrid

<DataGrid 
   Name="ProjectsGrid" 
   ItemsSource="{Binding Path=FilesCollection}" 
   AutoGenerateColumns="False" 
   CanUserAddRows="False"  
   CanUserDeleteRows="True">
   <DataGrid.Columns>
      <DataGridCheckBoxColumn Header="Use" Binding="{Binding Include}"/>
      <DataGridTextColumn Header="Name" Binding="{Binding Path, Converter={StaticResource PathConverter}}"/>
   </DataGrid.Columns>
</DataGrid>

这是我的 ViewModel:

namespace Validator.ViewModels
{
  class SettingsVm : INotifyPropertyChanged
  {
    public void ChangeProperty(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;

    public ObservableCollection<CsprojFile> FilesCollection { get; set;} 
    public SettingsVM()
    {
        FilesCollection = new ObservableCollection<CsprojFile>();
   }
}

我必须向我的 ViewModel 添加一些事件吗?还是有其他我不知道的方法?

提前致谢。

【问题讨论】:

  • 你有/使用ICommand接口的一些实现吗?也许是RelayCommand
  • 是的,我有自己的实现。你有什么建议?我应该在这里上传我的实现给你看吗?
  • 不需要。我只是想知道为什么项目会留在你的收藏中。它应该被删除,就像我的情况一样。如果您的收藏不允许删除,CanUserDeleteRows 选项将被忽略。来自MSDN删除一行会从 ItemsSource 中删除该行所代表的项目。如果 ItemsSource 不允许删除,即使此属性设置为 true,用户也无法删除行

标签: c# wpf xaml datagrid


【解决方案1】:

如果您希望从 View 更新您的集合,那么您应该提到 ItemSource 的绑定模式:

<DataGrid 
   Name="ProjectsGrid" 
   ItemsSource="{Binding Path=FilesCollection, Mode=TwoWay}" 
   AutoGenerateColumns="False" 
   CanUserAddRows="False"  
   CanUserDeleteRows="True">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Use" Binding="{Binding Include}"/>
                <DataGridTextColumn Header="Name" Binding="{Binding Path}"/>
            </DataGrid.Columns>
        </DataGrid>

这应该可以解决您的问题

【讨论】:

  • 它应该也可以在没有两种方式的情况下工作。您没有更改整个集合,而是删除了一个项目。事实上,从视图中消失的项目表明它应该按原样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2015-01-21
相关资源
最近更新 更多