[英]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.