Динамическое уведомление UI об изменениях в WPF

Всем привет, активно изучаю WPF, а именно фреймворк Avalonia(MVVM), и тут возник такой вопрос. Как сделать динамическое обновление UI? Например:

У меня есть UserControl который содержит в себе DataGrid, сам DataGrid получает данные из БД, если например добавить новый элемент в БД, то в UI мы не увидим этот новый элемент, до тех пор пока не перезапустить приложение, т.е заново не проинициализировать конструкторы, которые подтягивают данные. Как сделать это более динамически чтобы приложение само знало когда обновлять данные в UI и т.д?

Понятно, что к DataGrid мы привязываем ObservableCollection, который уведомляет UI об изменениях, и тем самым у нас обновляется DataGrid и видны новые элементы. У меня вопрос именно как сделать так чтобы методы, которые выполняют запросы к БД вызывались тогда, когда нужно обновить данные. Вот пример кода:

    public TestViewModel()
    {
        CarsRental = new ObservableCollection<CarsRentalModel>();
        LoadCollectionCars();
        BtnSaveChangedCommand = new AsyncRelayCommand(SaveChanges);
    }

    private void LoadCollectionCars()
    {
        Task.Run(async () =>
        {
            using (ApplicationContextDb db = new())
            {
                var cars = await db.CarsRentalModels.ToListAsync();

                foreach (var item in cars)
                {
                    CarsRental.Add(item);
                }
            }
        });
    }

Тут у меня есть конструктор TestViewModel в котором я вызываю метод LoadCollectionCars. Данный конструктор инициализируется при запуске приложения, получается, что метод вызывается один раз и подтягивает данные на момент инициализации конструктора. Как сделать так, чтобы метод сам знал, что данные нужно обновить?

Тут уже идут мои варианты как можно это сделать:

  1. Наверное, самый убогий и неправильный способ - это создать бесконечный цикл в конструкторе и засунуть туда Task.Delay(time), после чего вызывать метод для обновления данных.
  2. Самый простой и тупой способ - у меня в приложении, есть условно главное меню, в котором можно выбирать страницы для посещения так скажем. И вот при нажатии на кнопку для перехода на этот UserControl, можно просто вызывать метод, который будет идти в БД и возвращать данные. Хотя это даже за способ нельзя назвать, так как это не будет работать если пользователь уже находится на данной странице.
  3. Самый наверное лучший способ из представленных - это просто сделать события и уведомлять подпищиков об изменениях, тем самым обновлять мой UI. Сделать это можно использовав SqlDependency, оно создаст событие, которое срабатывает при изменении данных в отслеживаемой таблице. Но я не совсем понимаю какие нюансы есть у данного способа и как правильно его реализовать для корректной работы, потому что ни разу этого не делал.

Надеюсь на вашу помощь :)


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