从DataGrid中删除选定的行

本文关键字:删除 DataGrid | 更新日期: 2023-09-27 18:03:14

嗨,伙计们,我已经研究了两天关于如何删除wpf数据网格中选定的行,但我发现没有什么有用的。我使用下面的PreviewKeyDown事件处理程序,但都是徒劳的。我只想删除用户选择的行。我是MVVM模式,我的代码是:

  public ObservableCollection<VLANSPropertyClass> vlan { get; set; }
     vlan = new ObservableCollection<VLANSPropertyClass>();
      public ICommand AddVlan
        {
          get
          {
            if (_addVlan == null)
              _addVlan = new RelayCommand(() => this.AddVlans());
            return _addVlan;
          }
        }
     public ICommand RemoveVlan
        {
            get
            {
                if (_removeVlan == null)
                    _removeVlan = new RelayCommand(() => this.RemoveVlans());
                return _removeVlan;
            }
        }
   void AddVlans()
    {
          Console.WriteLine("Add vlan");
            var serial = new VLANSPropertyClass();
            serial.S_No = vlan.Count + 1;
            Console.WriteLine(serial.S_No);
            serial.vname = VlanName;
            Console.WriteLine(serial.vname);
            serial.vid = VlanID;
            Console.WriteLine(serial.vid);
            serial.ip = VlanIP1 + "." + VlanIP2 + "." + VlanIP3 + "." + VlanIP4;
            Console.WriteLine(serial.ip);
            serial.vports = SelectedVlanPort;
            vlan.Add(serial);
        }
     void RemoveVlans()
        {
            var rem = new VLANSPropertyClass();
            rem.S_No = vlan.Remove();
            rem.vname = vlan.Remove();
            rem.ip = vlan.Remove();
        }
谁能给我提供解决这个问题的方法?

从DataGrid中删除选定的行

通常在WPF程序中使用MVVM设计模式。您的DataGrid控件的ItemsSource属性绑定到对象的ObservableCollection。要从DataGrid中删除一行,您所要做的就是从ObservableCollection中删除对象。

如果你不知道"MVVM"是什么意思,这里有一篇关于模型视图视图模型设计模式的MSDN文章。

编辑

我在这里回复你的评论,因为回复需要比评论所能容纳的更多的空间。

你的问题中没有包含任何XAML,所以我假设你的DataGrid定义是这样的:

<DataGrid Name="MyDataGrid"
          ItemsSource="{Binding Path=vlan}"
          . . .>
    <DataGrid.Columns>
        . . .
    </DataGrid.Columns>
</DataGrid>

首先,视图模型需要一个类型为VLANSPropertyClass的属性来保存当前在DataGrid中被选中的项:

public VLANSPropertyClass SelectedVlan {
    get { return iSelectedVlan; }
    set { 
        iSelectedVlan = value;
        OnPropertyChanged ("SelectedVlan" );
    }
}
private VLANSPropertyClass iSelectedVlan = null;
接下来,必须修改XAML以将新属性绑定到DataGrid's SelectedItem属性:
<DataGrid Name="MyDataGrid"
          ItemsSource="{Binding Path=vlan}"
          SelectedValue={Binding Path=SelectedVlan}"
          . . .>
    <DataGrid.Columns>
        . . .
    </DataGrid.Columns>
</DataGrid>
然后,你的RemoveVlans方法应该看起来像:
void RemoveVlans() {
    if ( SelectedVlan != null ) {
        vlans.Remove( SelectedVlan );
        SelectedVlan = null;
    }