В WPF RoutedUICommand
не является объектом зависимости, и при этом он не реализует INotifyPropertyChanged
, что означает, что вы должны связать его свойство Text
с чем-то в пользовательском интерфейсе, таким как заголовок MenuItem, и Mode
был't OneTime
, вы потенциально можете получить утечку памяти с динамически загружаемыми контекстными меню или пользовательскими интерфейсами, где элементы создаются и уничтожаются очень часто, когда эти пользовательские интерфейсы загружаются и выгружаются.
И наоборот, если вы используете OneTime
, вы избежите утечки, но потеряете уведомление об изменении, которое нам нужно, поскольку текст нашего меню должен динамически обновляться в соответствии с состоянием в приложении.(Подумайте, как типичная команда "Save 'xxx' As..."
изменяется, отражая имя текущего элемента.)
Тем не менее, как правильно связать текст и получить изменения, не вызывая утечек памяти?
Нашапредлагаемое решение заключается в создании подкласса RoutedCommand
(примечание: нет «пользовательского интерфейса»), в котором мы создаем собственное свойство Text
, а также реализуем INotifyPropertyChanged
для его поддержки.Однако мы не уверены, будут ли проблемы со встроенной поддержкой WPF для таких вещей, как автоматическая привязка заголовка MenuItem
к свойству Text
, поскольку это не RoutedUICommand
.(Обратите внимание, что мы могли бы просто использовать реальный объект RoutedUICommand
, а затем «новый поверх» свойства Text
, но там вы можете столкнуться с проблемами, связанными с доступом к свойству, поэтому мы бы предпочли избежать этого, если это возможно.)