在 WPF 中, is 不是依赖对象,如果您要将其属性绑定到 UI 中的某些内容(例如 MenuItem 的标头),RoutedUICommand
它也不会实现意义,并且 is not ,您可能会在动态加载的上下文中出现内存泄漏在加载和卸载这些 UI 时非常频繁地创建和销毁项目的菜单或 UI。INotifyPropertyChanged
Text
Mode
OneTime
相反,如果您使用OneTime
,您将避免泄漏,但您将丢失我们需要的更改通知,因为我们的菜单文本需要根据应用程序中的状态动态更新。(想想一个典型的"Save 'xxx' As..."
命令如何改变以反映当前项目的名称。)
也就是说,我们如何正确绑定到文本并在不导致内存泄漏的情况下获取更改?
我们提出的解决方案是创建一个子类RoutedCommand
(注意:没有“UI”),我们在其中创建自己的Text
属性并实施INotifyPropertyChanged
以支持它。但是,我们不确定 WPF 的内置支持是否会出现问题,例如自动将 aMenuItem
的标头绑定到Text
属性,因为它不是RoutedUICommand
. (注意,我们可以只使用一个真实的RoutedUICommand
对象,然后“新建”该Text
属性,但是您可能会遇到访问该属性的方式的问题,因此我们宁愿尽可能避免这种情况。)