如何在MVVM / WPF中处理过于逻辑的打包控件?

时间:2019-05-29 07:38:09

标签: c# wpf mvvm

我正在使用AvalonEdit来显示格式化的文本。该应用程序是使用C#/ WPF的MVVM架构编写的。

问题在于AvalonEdit控件包含很多逻辑,这些逻辑只能从控件本身访问。因此,例如,我要处理当前选择-为此,我必须达到editor.TextArea.Selection-无法从视图模型中访问它。

现在我的体系结构可以简称为:

  • 主视图模型包含DocumentViewModel个列表
  • DocumentViewModel包含TextDocument
  • DocumentViewModel的列表绑定到DockingManager,以显示为选项卡列表
  • DockingManager的DataTemplate设置为包含TextEditor
  • 的控件 来自TextDocument
  • DocumentViewModel绑定到Document的{​​{1}}属性

说,我想从主窗口的视图模型访问选定的文本。我可以访问当前活动文档的TextEditor,但是我无法访问显示该控件的控件(它是通过DocumentViewModel的DataTemplate机制创建和管理的)

Architecture diagram

通常,我通过将视图通过接口传递给viewmodel来解决这种问题-这样viewmodel可能(间接地)要求view做我无法绑定或通过命令传递的事情。但是由于我无法控制文档视图的创建,因此无法使用这种解决方案。

如何从仅具有DocumentViewModel的MainWindowViewModel访问TextEditor?以及如何在不破坏MVVM模型的情况下做到这一点? (显然,我可能试图通过可视化树来访问控件,但这是黑客行为,我绝对想避免它)

0 个答案:

没有答案