WPF - вызвать оконную функцию с дочерней страницы - PullRequest
1 голос
/ 10 ноября 2009

У меня есть окно WPF, в котором используется док-панель и элемент управления меню. У меня есть код для создания пунктов меню на основе идентификатора пользователя.

В этом окне у меня есть фрейм, содержащий страницу WPF. Я выполняю всю аутентификацию на странице, а затем у меня есть идентификатор пользователя для используемого окна. Однако я не могу заставить родительское окно «обновиться» и создать строку меню с новой информацией идентификатора. Когда загружается окно, я не запускаю команды для отображения строки меню. Я пытался поместить это в свою собственную, публичную функцию и вызывать ее со страницы, но это, похоже, не работает.

Должен быть метод окна, который мне не хватает, который может отображать строку меню в зависимости от вызова со страницы.

1 Ответ

0 голосов
/ 11 ноября 2009

Похоже, вы все еще мыслите процедурно, в стиле WinForms. То, что вы описываете, было бы необходимо в WinForms, но в WPF это обычно намного проще: просто используйте привязку данных. Пока ваши пункты меню генерируются из свойства зависимостей «UserID» (или включаются / отключаются на его основе), все, что вам нужно сделать, это установить UserID DependencyProperty и пользовательский интерфейс будет обновляться без дополнительного кода.

Вот как получить идентификатор пользователя в свойстве DependencyProperty окна или объекте контекста:

  • В вашем Окне или объекте контекста создайте DP "UserID"
  • Сделайте ваше Окно или ваш объект контекста DataContext страницы
  • В конце кода аутентификации установите DataContext.UserID (или, альтернативно, создайте свойство UserID на странице и сделайте так, чтобы окно привязывалось к нему с помощью двусторонней привязки)

Если у вас есть идентификатор пользователя в DependencyProperty, есть много способов автоматически обновлять пункты меню при каждом его изменении:

  • В каждом пункте меню свяжите его видимость с UserID DP в окне, используя соответствующий преобразователь (используя параметр преобразователя для различения элементов), -OR-
  • Используйте конвертер для настройки ItemsSource, чтобы отфильтровать свои предметы, -OR-
  • Создайте PropertyChangedCallback, который устанавливает фильтр для CollectionView, который вы используете для пунктов меню, -OR-
  • Некоторая другая техника (есть много других хороших способов сделать это)

Для типичных ситуаций мы говорим здесь о менее чем 10 строках C #, не считая объявлений DependencyProperty.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...