微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用FilterEventArgs MVVM从ICollectionView删除重复项

如何解决如何使用FilterEventArgs MVVM从ICollectionView删除重复项

我的Vehicle模型中有两个属性CategoryName

我有一个名为VehiclesView的ICollectionView。

绑定到Category时,ListView显示

Airplane
Helicopter
Helicopter
Airplane
Car
Car

我必须能够过滤VehiclesView,以删除同一Category的重复项,从而导致:

Airplane
Car
Helicopter

要求:过滤逻辑必须使用FilterEventArgs,如下所示:

 public void ApplyFilter(object sender,FilterEventArgs e)
    {
        Vehicle v = e.Item as Vehicle;
        if (v != null)
        {
            // Remove duplicate instances of Category
            if (??????????????)
            {
                e.Accepted = false;
            }
            else
            {
                e.Accepted = true;
            }
        }
    }

我只需要有关过滤逻辑的帮助。

非常感谢您的帮助。

编辑1:“类别”是用户定义的,这意味着过滤器必须在运行时比较属性值并删除重复项。

编辑2:添加了所进行的所有研究的链接,这些链接都没有提供我需要的过滤器逻辑,但是确实提供了其他类型的过滤器逻辑以及如何实现过滤/排序/分组的“大图”。

https://weblogs.asp.net/monikadyrda/wpf-listcollectionview-for-sorting-filtering-and-grouping

http://wpftutorial.net/DataViews.html

C# - how to get distinct items from a Collection View

https://social.technet.microsoft.com/wiki/contents/articles/26673.wpf-collectionview-tips.aspx

http://www.abhisheksur.com/2010/08/woring-with-icollectionviewsource-in.html

Implementing a ListView Filter with Josh Smith's WPF MVVM Demo App

http://www.codewrecks.com/blog/index.php/2011/02/23/filtering-in-mvvm-architecture/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AlkampferEng+%28Alkampfer%27s+Place%29&utm_content=Google+Reader

解决方法

您可以创建查找表:

private HashSet<object> ExistingItemsTable { get; } = new HashSet<object>();
private void ApplyFilter(object sender,FilterEventArgs e)
{
  if (this.ExistingItemsTable.Contains(e.Item))
  {
    // FilterEventArgs.Accepted is true by default
    e.Accepted = false;
    return;
  }

  this.ExistingItemsTable.Add(e.Item);
}

您需要订阅源集合的CollectionChanged事件以维护查找表:删除项目时,还需要从表中删除它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。