从DataGrid中删除所选行?

时间:2014-05-14 12:51:17

标签: c# wpf datagrid

大家好我已经研究了两天关于如何删除wpf datagrid中的选定行但我发现没什么用。我在下面使用了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();

        }

任何人都可以为我提供这个问题的解决方案。任何帮助都会非常明显。

1 个答案:

答案 0 :(得分:1)

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

如果您不知道“MVVM”的含义,请参阅MSDN article about the Model View View-Model Design Pattern

修改

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

您的问题中没有包含任何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;
    }

这样就可以了。