2013-07-13 72 views
1

我正在嘗試使用MVVM將Windows窗體控件綁定到WPF中的面板。我的總體目標是能夠動態地更改我將使用的具體Windows窗體控件,因爲我計劃有幾個可用的窗體控件。如何使用WPF中的MVVM將Windows窗體控件綁定到「Grid」面板

現在,我已經能夠通過讓應用程序在初始化時啓動一個回調來工作,該回調通過名稱訪問網格對象。這裏是XAML目前的樣子:

<Grid Name="WindowsControlObject"></Grid> 

回調如下所示:

private void WindowLoaded(object sender, RoutedEventArgs e) 
{ 
    System.Windows.Forms.Integration.WindowsFormsHost host = 
     new System.Windows.Forms.Integration.WindowsFormsHost(); 

    System.Windows.Forms.Control activeXControl = new SomeWindowsControl(); 

    host.Child = activeXControl; 

    this.WindowsControlObject.Children.Add(host); 
} 

雖然這個作品,我想充分利用MVVM模式,因此是有辦法,我可以這樣做在XAML /模型視圖如下:

XAML:

<Grid Content="{Binding WindowsControl"></Grid> 

在我的模式lView:

public class MyModelView 
{ 
    public Grid WindowsControl; 

    public MyModelView{ 
     WindowsControl = new Grid; 

     System.Windows.Forms.Integration.WindowsFormsHost host = 
      new System.Windows.Forms.Integration.WindowsFormsHost(); 

     System.Windows.Forms.Control activeXControl = new SomeWindowsControl(); 

     host.Child = activeXControl; 

     WindowsControl.WindowsControlObject.Children.Add(host); 
    } 
} 

我甚至在我的探索/可能的方法嗎?我想到我可能需要使用其他類型的面板(除了網格),但還沒有發現任何明顯的東西。如果不能完成,我有一個解決方案,只是不是一個很乾淨的。

+0

做更多挖掘,事實證明,我真的想要將它綁定到「ContentControl」標記,如下所示: XAML: ViewModel: public MyModelView {System.Windows.Forms.Control _myControl; 公共WindowsFormsHost STKObject { 得到 { 返回新WindowsFormsHost(){兒童= _myControl}; } } } – Aerophilic

+0

不明白你的問題,你想使用綁定將'host'控件添加到'Grid'中? –

回答

0

做更多的挖掘,事實證明,我真的很想把它綁定到一個 「ContentControl中」 的標籤,如下所示:

XAML:

<ContentControl Content="{Binding WindowsControl}"/> 

視圖模型:

private System.Windows.Forms.Control _myControl; 

    public WindowsFormsHost STKObject 
    { 
     get 
     { 
      return new WindowsFormsHost() { Child = _myControl}; 
     } 
    } 
相關問題