Как определить, когда пользовательский элемент управления WPF завершил загрузку - PullRequest
5 голосов
/ 25 июля 2011

У меня есть пользовательский элемент управления WPF с сеткой UIElement с несколькими текстовыми полями и комбинированными полями. У меня есть кнопка (btnApply), чье состояние IsEnabled должно быть ложным после завершения загрузки формы. Тем не менее, событие TextChanged вызывается при заполнении сетки и меняет IsEnabled на true. Я добавил логический метод, который сохраняет значение btnApply.IsEnabled = false после завершения загрузки пользовательского элемента управления. Но я не могу сказать, когда пользовательский элемент управления полностью завершил загрузку, чтобы изменить логическое состояние моего метода, чтобы можно было изменить btnApply.IsEnabled. Я пробовал события Loaded в пользовательском элементе управления и пытался проверить событие IsLoaded, и все они запускаются до завершения загрузки всех элементов в пользовательском элементе управления.

Редактировать: Сетка UIElement пользовательского элемента управления заполняется через ItemsSource = List. Изменения в текстовом поле и поле со списком отслеживаются с помощью событий TextChanged и SelectionChanged.

Ответы [ 2 ]

6 голосов
/ 25 июля 2011

Попробуйте использовать Dispatcher для запуска изменения IsEnabled с более поздним приоритетом DispatcherPriority, чем Loaded, например Input.

Dispatcher.BeginInvoke(DispatcherPriority.Input,
    new Action(delegate() { btnApply.IsEnabled = false; } ));

Вы можете просмотреть заказ DispatcherPriority здесь

0 голосов
/ 25 июля 2011

Может быть, я неправильно понял проблему, но регистрация для Initialized / Loaded в UserControl не помогает? Если нет, как вы заполняете Сетка?

...