计算删除重复的属性

时间:2016-07-26 18:02:29

标签: c#

我有一个带有nations列表的可观察集合,每个国家/地区对象都有league属性。现在每个联盟可以不止一次绑定,所以我需要做的是删除重复的属性league值并计算每个国家可用的联赛数量。一个小练习例子:

数据结构

public class Nation
{
    public string League { get; set; }
}

private static ObservableCollection<Nation> _nations = new ObservableCollection<Nation>();
public ObservableCollection<Nation> Nation
{
   get { return _nations; }
}

数据人口

Nation nation = new Nation();
nation.League = "ITEM1";
ViewModel.Nation.Add(nation);
nation = new Nation();
nation.League = "ITEM1";
ViewModel.Nation.Add(nation);

现在,如果我在xaml中绑定项目计数:

<TextBlock Text="{Binding ItemCount}" />

我看到2,但我需要删除副本并打印1

1 个答案:

答案 0 :(得分:2)

我建议您修改add方法,以便在添加每个项目之前检查重复项。

ViewModel.AddNation(Nation nation);

方法是这样的:

public void AddNation(Nation nation)
{
    if (!_nations.Any(x => x.League == nation.League))
                _nations.Add(nation);

}

第二种方式:

你可以做以下黑客攻击,这不是首选:

public ObservableCollection<Nation> Nation
{
    get
    {
        _nations = new ObservableCollection<Nation>(_nations.GroupBy(x => x.League).SelectMany(x => x.Take(1)));
        return _nations;
    }
}

请注意,我不建议使用第二种方法,因为它会更改get方法中的状态。

第三种方式:

您可以在ViewModel中添加一个新属性,该属性获得Distinct Count并将您的XAML绑定到此属性:

public static int NationsItemCount => _nations.Select(x => x.League).Distinct().Count();