从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();
}
谁能给我提供解决这个问题的方法?
通常在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;
}