Предварительные извинения за объяснения в стиле событий;Есть много факторов, которые, я чувствую, играют свою роль.WPF - не мой любимый фреймворк, и это, вероятно, показывает.:)
Старая ситуация: у меня было окно с несколькими элементами управления.В зависимости от их выбора, я использовал мультибиндинги и конвертер, чтобы определить, нужно ли показывать определенные элементы управления, которые информируют пользователя о последствиях их изменений, прежде чем они в конечном итоге подтвердят их с помощью OK (или просто отклонят с помощью Отмена).Это сработало идеально.
Проблема: Слишком много элементов управления со временем, слишком много помех.Решение: Поместите материал в разные страницы, чтобы пользователю было легче просматривать.Чтобы изменения сохранялись при произвольном просмотре пользователем страниц между страницами, я создаю их динамически и помещаю в кеш (Dictionary<string, BasePage>
, см. Ниже), из которого они будут извлекаться по мере их выбора пользователем.
Следствие. Мне нужно отделить привязки от элементов управления уведомлениями, так как различные параметры теперь находятся на разных страницах.
Решение?Я поместил класс BasePage
, который предоставляет некоторые абстрактные свойства, доступные только для чтения, которые определяют различные аспекты, о которых нужно знать окну для выполнения его уведомлений.Например, свойство bool requiresReboot
определяет, требует ли текущее состояние на этой странице перезагрузка для получения (полного) эффекта.Определенная страница реализует свойство на основе своих элементов управления.Проблема: я не знаю, как сохранить правильную привязку, которая корректно обновляется при изменении страниц.Я попытался дать своему элементу управления уведомлением привязку к Dictionary<string, BasePage>
с помощью конвертера, который проверяет все страницы и соответствующее свойство.
Вопросы:
1) Как создать для этого подходящее свойствоцель?Я предполагаю, что мне нужен DependancyProperty
, так как я немного прочитал MSDN, но не могу понять, как это сочетается.2) Как сделать ссылку между моим настраиваемым свойством, чтобы она позволяла (нескольким) элементам управления на странице изменять это свойство?Я использую INotifyPropertyChanged
как-то?Мой старый пример связан с несколькими CheckBox.IsChecked
свойствами в XAML.Я стараюсь не помещать тонны событий (OnChange и т. Д.) В элементы управления, поскольку исходный код не нуждался в этом, и мне сказали, что это создает грязное решение для WPF.3) Наконец, я подозреваю, что мне может понадобиться изменить класс Dictionary<string, BasePage>
на пользовательскую реализацию, которая реализует какой-то INotifyPropertyChanged
, но для коллекций?Я считаю, что «Наблюдаемая коллекция» - это термин, который я ищу.
Я надеюсь, что кто-то сможет преодолеть разрыв в моем понимании внутренних элементов WPF (собственности);Я был бы очень признателен.Базовая выборка была бы еще лучше, но если она слишком сложная, подойдет только толчок в правильном направлении.Спасибо.:)