大家好我已经研究了两天关于如何删除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();
}
任何人都可以为我提供这个问题的解决方案。任何帮助都会非常明显。
答案 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;
}
这样就可以了。