1

我们目前正在将我们的产品从 WinForms 切换到 WPF。目前,我们正在使用我们的应用程序所需的一些第 3 方 WinForm 控件。尽管我们计划最终用 WPF 版本替换它们,但现在这是不可能的。我们已经尝试将它们托管在 WindowsFormsHost 控件内的 wpf 窗口中,它似乎工作得很好。我们唯一的问题是如何将数据从 VM 传递到这些控件。我们希望避免对 VM 进行任何代码隐藏和更改,以适应此控件。理想情况下,我们宁愿让 VM 完全不知道用于显示其数据的控件,这样当我们更改这些控件的 WPF 版本时,我们只需要修改视图。这就是为什么我们正在寻找一种方法将 VM 属性绑定到来自 XAML 的托管 WinForm 控件。如果这有帮助,我们当然可以接受这样一个事实,即从 VM 到控件的绑定只有一种方式,并且我们不介意绑定是否只工作一次,而没有来自 VM 的后续更新,因为我们的 VM 属性有约束力不改变。也许有人对我们如何实现这一点有任何想法?

4

1 回答 1

2

不确定是否有更好的方法,但这里有一个想法:

将您的 WinForm 控件/WindowsFormsHost 控件包装到包装器控件中(从 Control 继承或使用 UserControl,无论哪种方式最适合您)。

在此包装器上,您可以添加要绑定到 VM 的依赖项属性。

在包装器代码中,您可以添加在包装器依赖项属性和 winform 属性之间来回传播更改所需的样板。

这隐藏了地毯下的污垢并暴露了一个漂亮的 WPF 外观,您可以像往常一样绑定到它,而无需更改您的 VM。

当控件被淘汰时,从你的项目中删除包装器,你可以将 VM 直接绑定到新的 WPF 替换控件。

于 2013-08-20T11:26:37.873 回答