繁体   English   中英

从DataGrid删除选定的行?

[英]Remove selected row from 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();

        }

任何人都可以为我提供解决此问题的方法。任何帮助将不胜感激。

通常,您在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;
    }

这样就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM