using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
namespace App11
{
public class PlayerViewModel
{
public PlayerViewModel()
{
PlayerService playerService = new PlayerService();
var data = playerService.GetData();
GeneratePanierByStatusGroup(data);
cvs.Source = Players;
SynchronizationContext sc = SynchronizationContext.Current;
Task.Run(() =>
{
Random rnd = new Random();
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(100);
int k = rnd.Next(0, data.Count);
sc.Post(new SendOrPostCallback((state) =>
{
int index = (int)state;
data[index].Number = rnd.Next(1, 25);
}), k);
}
});
}
CollectionViewSource cvs = new CollectionViewSource() { IsSourceGrouped = true };
public ICollectionView PlayerSource { get => cvs.View; }
private ObservableCollection _players = new ObservableCollection();
public ObservableCollection Players { get => _players; }
private void GeneratePanierByStatusGroup(List players)
{
var query = from item in players
group item by item.Position into g
orderby g.Key
select new { GroupName = g.Key, Items = g };
foreach (var g in query)
{
GroupInfosList info = new GroupInfosList();
info.Key = g.GroupName + " (" + g.Items.Count() + ")";
foreach (var item in g.Items) info.Add(item);
_players.Add(info);
}
}
}
public class Player : INotifyPropertyChanged
{
public string FullName { get; set; }
private int _number;
public int Number { get => _number; set { _number = value; OnPropertyChanged(); } }
public PlayerPosition Position { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public enum PlayerPosition
{
Striker,
Defender,
Goalkeeper,
Midfielder,
Coach
}
public class GroupInfosList : List