我有一个带有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
。
答案 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();