C# WPF асинхронная загрузка данных
Есть класс CardViewModel и ViewModel, где внутри ViewModel создаю экземпляры класса CardViewModel и предоставляю каждому экземпляру свой источник данных, который потом привязываю в XAML. Вопрос: как мне сделать загрузку данных асинхронно, чтобы все это дело не занимало главный поток?
public class CardViewModel : BaseViewModel
{
public ObservableCollection<Card> Items { get; }
private readonly string cardType;
public CardViewModel(string cardType)
{
Items = new ObservableCollection<Card>();
this.cardType = cardType;
}
public async Task LoadItemsGroupAsync()
{
Items.Clear();
var items = await MockDataStore.GetGroupID(cardType);
foreach (var item in items)
{
Items.Add(item);
}
}
}
class ViewModel : BaseViewModel
{
ObservableCollection<CardViewModel> _children;
public ViewModel()
{
MockDataStore.GetInstance();
_children = new ObservableCollection<CardViewModel>();
_children.Add(new CardViewModel(TypeCard.KING_CLUBS));
_children.Add(new CardViewModel(TypeCard.KING_DIAMONDS));
_children.Add(new CardViewModel(TypeCard.KING_HEARTS));
_children.Add(new CardViewModel(TypeCard.KING_SPADES));
_children.Add(new CardViewModel(TypeCard.QUEEN_CLUBS));
_children.Add(new CardViewModel(TypeCard.QUEEN_DIAMONDS));
_children.Add(new CardViewModel(TypeCard.QUEEN_HEARTS));
_children.Add(new CardViewModel(TypeCard.QUEEN_SPADES));
_children.Add(new CardViewModel(TypeCard.JACK_CLUBS));
_children.Add(new CardViewModel(TypeCard.JACK_DIAMONDS));
_children.Add(new CardViewModel(TypeCard.JACK_HEARTS));
_children.Add(new CardViewModel(TypeCard.JACK_SPADES));
MaxValue = Children.Count;
LoadResources = new AsyncRelayCommand(Load, null);
}
public ICommand LoadResources { get; }
private async Task Load()
{
foreach (var item in Children)
{
await item.LoadItemsGroupAsync();
ProgressValue++;
}
}
//public ICommand LoadResources
//{
// get => new AsyncCommand(async (_) =>
// {
// foreach (var item in Children)
// {
// await item.LoadItemsGroup();
// ProgressValue++;
// }
// });
//}
private int _maxValue;
public int MaxValue
{
get => _maxValue;
set => Set(ref _maxValue, value);
}
private int _progressValue = 0;
public int ProgressValue
{
get => _progressValue;
set => Set(ref _progressValue, value);
}
public ObservableCollection<CardViewModel> Children { get { return _children; } }
}