2013-08-20 97 views
1

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

回答

2

不知道是否有更好的办法,但这里有一个想法:

包装你的WinForm控件/ WindowsFormsHost控件到包装控件(从Control继承或使用用户控件,什么是最适合你)。

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

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

这隐藏了地毯下的污垢,并暴露出一个很好的WPF外观,您可以像平常一样绑定,而无需更改虚拟机。

当控件逐步淘汰时,从您的项目中移除包装,您可以直接将VM绑定到新的WPF替换控件。

+0

+1,尽管一些代码示例会使这个更好的答案。 –