В WPF как вы можете прослушивать изменения свойства text RoutedUICommand без утечки памяти? - PullRequest
1 голос
/ 24 октября 2011

В WPF RoutedUICommand не является объектом зависимости, и при этом он не реализует INotifyPropertyChanged, что означает, что вы должны связать его свойство Text с чем-то в пользовательском интерфейсе, таким как заголовок MenuItem, и Mode был't OneTime, вы потенциально можете получить утечку памяти с динамически загружаемыми контекстными меню или пользовательскими интерфейсами, где элементы создаются и уничтожаются очень часто, когда эти пользовательские интерфейсы загружаются и выгружаются.

И наоборот, если вы используете OneTime, вы избежите утечки, но потеряете уведомление об изменении, которое нам нужно, поскольку текст нашего меню должен динамически обновляться в соответствии с состоянием в приложении.(Подумайте, как типичная команда "Save 'xxx' As..." изменяется, отражая имя текущего элемента.)

Тем не менее, как правильно связать текст и получить изменения, не вызывая утечек памяти?

Нашапредлагаемое решение заключается в создании подкласса RoutedCommand (примечание: нет «пользовательского интерфейса»), в котором мы создаем собственное свойство Text, а также реализуем INotifyPropertyChanged для его поддержки.Однако мы не уверены, будут ли проблемы со встроенной поддержкой WPF для таких вещей, как автоматическая привязка заголовка MenuItem к свойству Text, поскольку это не RoutedUICommand.(Обратите внимание, что мы могли бы просто использовать реальный объект RoutedUICommand, а затем «новый поверх» свойства Text, но там вы можете столкнуться с проблемами, связанными с доступом к свойству, поэтому мы бы предпочли избежать этого, если это возможно.)

...