Использование LINQ для получения 1-2-3 баллов и привязки их к просмотру - PullRequest
1 голос
/ 23 августа 2011

У меня есть стол с игроками и счетами (Имя: счет Майка: 10, Имя: счет Питера: 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 из-замножественные числа один, два, три балла:

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" />

Итак, у меня есть 2 вопроса:

  1. Как получить нужную коллекциюс количеством баллов 1/2/3?
  2. Как получить их в моем виде?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Ну, я не буду вдаваться в бит привязки данных, но запрос 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()));
1 голос
/ 23 августа 2011

Вы привязаны к FirstOne, поэтому вам нужно изменить свойство для этого свойства.

public IEnumerable<TotalViewModel> FirstOne 
{ 
    get
    {
        return _firstOne;
    }
    private set
    {
        _firstOne = value;
        RaisePropertyChanged("FirstOne");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...