嗨,伙计们,我正在使用可观察的集合来存储wpf数据集中的值,但是我想要自动删除重复的行。有人能帮帮我吗。我试过循着方向走,但没有成功。我用的是MVVM。
我的代码:
public ObservableCollection<VLANSPropertyClass> vlan { get; set; }
vlan = new ObservableCollection<VLANSPropertyClass>();
void AddVlans()
{
if ((String.IsNullOrEmpty(VlanName)) ||
String.IsNullOrEmpty(VlanID) ||
String.IsNullOrEmpty(VlanIP1) ||
String.IsNullOrEmpty(VlanIP2) ||
String.IsNullOrEmpty(VlanIP3) ||
String.IsNullOrEmpty(VlanIP4) ||
String.IsNullOrEmpty(SelectedVlanPort))
{
MessageBox.Show("Please fill the empty fields", "Alert", MessageBoxButton.OK);
}
else
{
Console.WriteLine("Add vlan");
var serial = new VLANSPropertyClass();
serial.S_No = vlan.Count + 1;
serial.vname = VlanName;
serial.vid = VlanID;
serial.ip = VlanIP1 + "." + VlanIP2 + "." + VlanIP3 + "." + VlanIP4;
serial.mask = Vlanmask1 + "." + Vlanmask2 + "." + Vlanmask3 + "." + Vlanmask4;
serial.vports = SelectedVlanPort;
if (itemexists())
{
MessageBox.Show("Value already present");
}
else
{
vlan.Add(serial);
}
}
}
bool itemexists()
{
var item = new VLANSPropertyClass();
return
(item.vname == VlanName) &&
(item.ip == VlanIP1 + "." + VlanIP2 + "." + VlanIP3 + "." + VlanIP4) &&
(item.vname == VlanName) &&
(item.vports == SelectedVlanPort);
}上面的方法正在添加行,但是它不会自动删除重复的行,.Any帮助将是非常可观的。
发布于 2014-09-01 10:50:09
抱歉我的评论.我没正确看到你的代码。
你的问题就在你的问题上。
试试这个:
if (vlan.FirstOrDefault( YOUR_CONDITIONS) ==null)
return false;
else return true;我认为YOUR_CONDITIONS一定是这样的:
x=>x.vname == serial.name &…
您的boolexistsitem应该接收作为参数的序列。
致以敬意,
=========NEW编辑
bool itemexists(VLANSPropertyClass serial){
if(vlan.FirstOrDefault(x=>x.vname ==serial.vname && serial.ip==x.ip && x.vports==serial.vports) == null)
return false;
else return true;
} 发布于 2014-09-01 10:49:39
可以使用LinQ Method从集合中删除重复项。试着做这样的事情:
vlan = GetSomeData(); // Fill with data however you want
vlan = new ObservableCollection<VLANSPropertyClass>(vlan.Distinct());这甚至可以缩短为:
vlan = new ObservableCollection<VLANSPropertyClass>(GetSomeData().Distinct());这只适用于移除精确的重复对象.也就是说,共享相同引用的对象。如果您只想删除具有相同属性值的对象,那么您可以使用重载的 Method,它接受一个IEqualityComparer参数。当然,您需要实现IEqualityComparer<T>接口才能使其正确工作。
https://stackoverflow.com/questions/25603941
复制相似问题