Как показать графическую загрузку / анимация, когда wpf привязка данных происходит

У меня есть пользовательский элемент управления WPF, который содержит a DataGrid. Я связываю ObservableCollection из моделей представления к нему. Каждая модель представления имеет другой набор моделей представления, которые я использую для привязки другого DataGrid кому. Таким образом, эффект является a DataGrid с вложенным DataGrid содержавшийся в строке детализирует шаблон.

Обычно привязка довольно быстра, но иногда когда существует много данных, она может подвесить UI, в то время как привязка/рисунок происходит.

Существует ли путь, где я могу или показать загружающуюся анимацию или индикатор выполнения, в то время как привязка/рисунок происходит?

12
задан Dave Clemmer 17 September 2011 в 00:18
поделиться

2 ответа

Вероятно, более формальное или, по крайней мере, более простое решение, но вы можете использовать модальное всплывающее окно, которое отображается в рабочей резьбе и закрывается асинхронно, когда ваша сетка загрузки:

Window waitWindow = new Window { Height = 100, Width = 200, WindowStartupLocation = WindowStartupLocation.CenterScreen, WindowStyle = WindowStyle.None };
waitWindow.Content = new TextBlock { Text = "Please Wait", FontSize = 30, FontWeight = FontWeights.Bold, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Center };

BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate
{
    Dispatcher.BeginInvoke(new Action(delegate { waitWindow.ShowDialog(); }));

    DataLoader dataLoader = new DataLoader(); // I made this class up
    dataLoader.DataLoaded += delegate
    {
        Dispatcher.BeginInvoke(new Action(delegate() { waitWindow.Close(); }));
    };

    dataLoader.LoadData();
};

worker.RunWorkerAsync();

Вы можете заменить текстовыйБлок с Что-то красивое, как панель загрузки, и вы можете сделать повторное использование кода путем параметризации объекта, который обрабатывает загрузку сетки (ы) и передает его в обычно используемый метод.

Я надеюсь, что это работает для вас.

2
ответ дан 2 December 2019 в 23:31
поделиться

Вы можете включить / выключить курсор ожидания с помощью триггера данных.

Я разместил код здесь .

1
ответ дан 2 December 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: