У меня есть пользовательский элемент управления WPF, который содержит a DataGrid
. Я связываю ObservableCollection
из моделей представления к нему. Каждая модель представления имеет другой набор моделей представления, которые я использую для привязки другого DataGrid
кому. Таким образом, эффект является a DataGrid
с вложенным DataGrid
содержавшийся в строке детализирует шаблон.
Обычно привязка довольно быстра, но иногда когда существует много данных, она может подвесить UI, в то время как привязка/рисунок происходит.
Существует ли путь, где я могу или показать загружающуюся анимацию или индикатор выполнения, в то время как привязка/рисунок происходит?
Вероятно, более формальное или, по крайней мере, более простое решение, но вы можете использовать модальное всплывающее окно, которое отображается в рабочей резьбе и закрывается асинхронно, когда ваша сетка загрузки:
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();
Вы можете заменить текстовыйБлок с Что-то красивое, как панель загрузки, и вы можете сделать повторное использование кода путем параметризации объекта, который обрабатывает загрузку сетки (ы) и передает его в обычно используемый метод.
Я надеюсь, что это работает для вас.
Вы можете включить / выключить курсор ожидания с помощью триггера данных.
Я разместил код здесь .