我正在使用AvalonEdit来显示格式化的文本。该应用程序是使用C#/ WPF的MVVM架构编写的。
问题在于AvalonEdit控件包含很多逻辑,这些逻辑只能从控件本身访问。因此,例如,我要处理当前选择-为此,我必须达到editor.TextArea.Selection
-无法从视图模型中访问它。
现在我的体系结构可以简称为:
DocumentViewModel
个列表DocumentViewModel
包含TextDocument
DocumentViewModel
的列表绑定到DockingManager
,以显示为选项卡列表DockingManager
的DataTemplate设置为包含TextEditor
TextDocument
的DocumentViewModel
绑定到Document
的{{1}}属性说,我想从主窗口的视图模型访问选定的文本。我可以访问当前活动文档的TextEditor
,但是我无法访问显示该控件的控件(它是通过DocumentViewModel
的DataTemplate机制创建和管理的)
通常,我通过将视图通过接口传递给viewmodel来解决这种问题-这样viewmodel可能(间接地)要求view做我无法绑定或通过命令传递的事情。但是由于我无法控制文档视图的创建,因此无法使用这种解决方案。
如何从仅具有DocumentViewModel的MainWindowViewModel访问TextEditor?以及如何在不破坏MVVM模型的情况下做到这一点? (显然,我可能试图通过可视化树来访问控件,但这是黑客行为,我绝对想避免它)