首页 > 解决方案 > 如何处理 MVVM/WPF 中过于逻辑的打包控件?

问题描述

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

问题是 AvalonEdit 控件包含很多逻辑,只能从控件本身访问。所以,比如说,我想处理当前的选择——因为我必须达到editor.TextArea.Selection——这不能从视图模型中访问。

现在我的架构可以简单描述为:

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

架构图

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

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

标签: c#wpfmvvm

解决方案


推荐阅读