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; } }

}

Ответы (0 шт):