2011-08-23 83 views
1

我有一個包含玩家和分數的表格(名稱:Mike分數:10,名稱:Peter分數:5等)以及包含3張圖片的視圖銅牌,銀牌和金牌。 在每張圖片下方,我想每週/每週顯示獲獎者的玩家名稱。 很可能會有多個銅牌,銀牌或金牌。使用LINQ獲得1-2-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()); 
    } 
} 

的我的View的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. 如何在View中獲取它們?

謝謝。

+0

乍一看我看不到任何東西,是錯誤的。首先,檢查你的輸出窗口,確保你沒有數據綁定問題。其次,確保UpdateFirstOne被調用,並返回元素。我們可以從那裏看看 –

回答

2

那麼我不會進入數據綁定位,但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())); 
+0

這太好了,謝謝!關於例如如何得到只有三個或兩個'ex aequo數字三'') –

+0

更正,我剛剛測試了兩個數字三有7個點,他們都在我的列表框中;) –

+1

我發現如何'只是'通過使用:.Skip(1)。取(1)而不是。取(3)。我已經開始很多了! –

1

您與FirstOne綁定,因此您需要爲該屬性更改屬性。

public IEnumerable<TotalViewModel> FirstOne 
{ 
    get 
    { 
     return _firstOne; 
    } 
    private set 
    { 
     _firstOne = value; 
     RaisePropertyChanged("FirstOne"); 
    } 
} 
+0

完美!謝謝Luc! –

相關問題