首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除wpf中的重复行?

问如何删除wpf中的重复行?
EN

Stack Overflow用户
提问于 2014-09-01 10:39:31
回答 2查看 1.3K关注 0票数 0

嗨,伙计们,我正在使用可观察的集合来存储wpf数据集中的值,但是我想要自动删除重复的行。有人能帮帮我吗。我试过循着方向走,但没有成功。我用的是MVVM。

我的代码:

代码语言:javascript
复制
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帮助将是非常可观的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-01 10:50:09

抱歉我的评论.我没正确看到你的代码。

你的问题就在你的问题上。

试试这个:

代码语言:javascript
复制
if (vlan.FirstOrDefault( YOUR_CONDITIONS) ==null)
return false;
else return true;

我认为YOUR_CONDITIONS一定是这样的:

x=>x.vname == serial.name &…

您的boolexistsitem应该接收作为参数的序列。

致以敬意,

=========NEW编辑

代码语言:javascript
复制
    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;    
}         
票数 0
EN

Stack Overflow用户

发布于 2014-09-01 10:49:39

可以使用LinQ Method从集合中删除重复项。试着做这样的事情:

代码语言:javascript
复制
vlan = GetSomeData(); // Fill with data however you want
vlan = new ObservableCollection<VLANSPropertyClass>(vlan.Distinct());

这甚至可以缩短为:

代码语言:javascript
复制
vlan = new ObservableCollection<VLANSPropertyClass>(GetSomeData().Distinct());

这只适用于移除精确的重复对象.也就是说,共享相同引用的对象。如果您只想删除具有相同属性值的对象,那么您可以使用重载的 Method,它接受一个IEqualityComparer参数。当然,您需要实现IEqualityComparer<T>接口才能使其正确工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25603941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档