使用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. 我如何获得所需的数字1/2/3分数集合?
  2. 我如何在我的视图中获得它们?

谢谢。

使用LINQ获得1-2-3分数并将其绑定到View

我就不讨论数据绑定了但是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");
    }
}