使用LINQ获得1-2-3分数并将其绑定到View
本文关键字:绑定 View LINQ 获得 1-2-3分 使用 | 更新日期: 2023-09-27 18:06:28
我有一个包含球员和分数的表(名称:Mike得分:10,名称:Peter得分:5等)和一个包含铜牌,银牌和金牌3张图片的视图。在每张图片下面,我想显示每个星期/回合获胜者的玩家名。很可能有多个铜牌、银牌或金牌得分。
在我的TotalViewModel我有一个ObservableCollection为所有的总分:
public const string TotalsPropertyName = "Totals";
private ObservableCollection<TotalViewModel> _totals;
public ObservableCollection<TotalViewModel> Totals
{
get
{
return _totals;
}
set
{
if (_totals == value)
return;
_totals = value;
RaisePropertyChanged(TotalsPropertyName);
}
}
我想使用IEnumerable,因为有多个数字one, two, three score:
public IEnumerable<TotalViewModel> FirstOne { get; private set; }
private void UpdateFirstOne()
{
this.FirstOne = this.Totals.Where(elem => elem.Model.score > 0).OrderByDescending(e => e.Model.score);
}
private void Totals_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
try
{
this.UpdateFirstOne();
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
我的视图的DataContext工作良好的直接绑定,它设置在UserControl:
DataContext="{Binding MainTotal, Source={StaticResource Locator}}
但是结果没有显示在我的DataGrid(猜我在这里犯了一个愚蠢的错误):
<data:DataGrid ItemsSource="{Binding FirstOne, Mode=OneWay}" AutoGenerateColumns="true" Height="100" Name="dataGrid1" Width="120" />
我有两个问题:
- 我如何获得所需的数字1/2/3分数集合?
- 我如何在我的视图中获得它们?
谢谢。
我就不讨论数据绑定了但是linq查询可以提取前三名,如下所示:
var topThreeScoringNameLists =
Totals
.GroupBy(x => x.Model.Score)
.OrderByDescending(x => x.Key)
.Take(3)
.Select(x =>
String.Join(", ", x.Select(y => y.Model.Name).ToArray()));
你绑定到firststone,所以你需要为这个属性做一个propertychanged
public IEnumerable<TotalViewModel> FirstOne
{
get
{
return _firstOne;
}
private set
{
_firstOne = value;
RaisePropertyChanged("FirstOne");
}
}