我有一张桌子上有球员和得分(名字:迈克得分: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());
}
}
我的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" />
所以我有两个问题:
感谢。
答案 0 :(得分: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()));
答案 1 :(得分:1)
您绑定到FirstOne,因此您需要为该属性执行propertychanged。
public IEnumerable<TotalViewModel> FirstOne
{
get
{
return _firstOne;
}
private set
{
_firstOne = value;
RaisePropertyChanged("FirstOne");
}
}