如何在Windows窗体中使用MVVM来显示WPF控件

问题描述:

我有要求将WPF控件集成到现有的Windows窗体应用程序中。最简单最简单的方法是创建一个ElementHost控件并将其Child属性设置为我的WPF视图。这工作正常,视图显示。如何在Windows窗体中使用MVVM来显示WPF控件

但是,与视图交互有点麻烦,并且需要修改后面视图代码中的字段和事物。如果我可以实例化底层视图的视图模型并以MVVM方式与它进行交互,那么每当我更改其视图模型的属性时都会显示和更新视图,那么更好的办法是实现这种视图模型。

有没有人知道一种方法来做到这一点?

你不能用设计器做到这一点,但是当你在代码中添加ElementHost的Child时,你可以直接创建和分配ViewModel。当您在此ViewModel上提交更改时,它们会直接反映在WPF视图中。

MyView view = new MyView(); 
MyViewModel model = new MyViewModel(); 
view.DataContext = model; 
ElementHost.Child = view; 


model.SomeBoundProperty = somethingElse; 
//Magic update of the WPF view 
+0

谢谢。这很好。我问另一个问题关于让样式工作[这里](http://*.com/questions/5259376/getting-generic-xaml-working-from-wpf-control-embedded-in-winforms) – cjroebuck 2011-03-10 12:11:00

MVVM的本质是绑定。由于在Windows窗体中没有这些,所以恐怕你不能在那里使用MVVM。

+0

当然,您可以从MVVM绑定中获益。无论您对ViewModel(也是来自WinForm应用程序)所做的更改都直接反映在视图中。正如我理解这是什么需要在这种情况下。 – fixagon 2011-03-10 10:04:45

+0

他在Windows窗体中使用它。正如他所提到的,他必须手动更改属性,因为他没有约束力。 – Aliostad 2011-03-10 10:07:09

+0

我不介意被低估,而是告诉可以节省一些人的时间和精力的事情。 – Aliostad 2011-03-10 10:07:43