Похоже, вы все еще мыслите процедурно, в стиле 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.