在 WPF 中使用复杂的 Winforms 控件(如 ZedGraph)和 MVVM 设计

发布于 2024-11-09 15:11:19 字数 441 浏览 8 评论 0原文

我正在构建一个基于 MVVM 模式的 WPF 桌面应用程序。

我想显示一些图表,并决定使用旧的 ZedGraph 库,因为我很熟悉它,目前似乎没有更好的选择(如果有,请评论)

我可以把图表使用以下代码控制我的视图:

    <WindowsFormsHost>
        <zed:ZedGraphControl x:Name="graphControl"/>
    </WindowsFormsHost>

但是,我想对图形控件进行相当多的操作,设置轴和数据等。坚持使用 MVVM,我无法从 ViewModel 调用图形控件,而且我不这样做不想将图形操作放在View的代码在后面。

有没有办法将 Graph Control 对象放入 ViewModel 中,在那里对其进行操作,并且仍然让 View 显示它?

I am building a WPF desktop application built on the MVVM pattern.

I want to display a number of graphs, and have decided on the old ZedGraph library, as I am familiar with it and there does not seem to be a better option available at the moment (please comment if there is)

I can put the graph control on my View with the following code:

    <WindowsFormsHost>
        <zed:ZedGraphControl x:Name="graphControl"/>
    </WindowsFormsHost>

However, I want to manipulate the graph control quite a bit, setting the axes and the data etc etc. Sticking to MVVM, I can't call the graph control from the ViewModel, and I don't want to put graph manipulation in the View's code behind.

Is there a way to put the Graph Control object in the ViewModel, manipulate it there, and still have the View display it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

归途 2024-11-16 15:11:19

IMO,我认为这是不可能的,因为您使用的底层控件是 Windows 窗体控件。因此,作为一种解决方法,您可以编写一个自定义 WPF 控件,它仅使用 WindowsFormsHost 方法包装图形控件,并公开操作所需的属性轴、数据等

IMO, I think it is not possible, since the underlying control which you make use is a Windows Forms control. So as a workaround, you could write a Custom WPF Control, which merely wraps Graph control using WindowsFormsHost approach and exposes the much needed properties to manipulate axes, data, etc.

她如夕阳 2024-11-16 15:11:19

要在 WPF 窗口中托管 ZedGraph,请查看此处的示例。

To host ZedGraph in WPF window, look at the example here.

岁月染过的梦 2024-11-16 15:11:19

这是很有可能的。您可以使用行为模式来操作图表。设置可在 XAML 中用作视图模型绑定的依赖属性。然后,行为(依赖属性)中的代码充当 xaml 中的绑定和实际控件之间的粘合剂。

It's quite possible. You can use the Behaviors pattern to manipulate the graph. Set up dependency properties that can be used as bindings in the XAML to your view model. Then the code in your Behaviors (the dependency properties) then acts as the glue between your bindings in the xaml and the actual control.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文