2016-07-12 33 views
0

在我的模型中,我使用需要UI控件處理的外部.dll文件,以便在其上顯示一些圖像。我想.dll相關的邏輯屬於模型 - 而不是用戶界面。MVVM將控制句柄傳遞給模型

我有一個視圖。裏面這個觀點我已經有了:現在

<WindowsFormsHost x:Name="winformsHost" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5,0,5,0"/> 

,在我的模型,我需要的句柄將被放置在這個WindowsFromsHost控制。所以我在做什麼是我傳遞一個參考的Windows FormsHost到視圖模型:

//View 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = new MainWindowViewModel(this.winformsHost); 
    } 

然後在視圖模型,我將它傳遞給產品型號:

public MainWindowViewModel (WindowsFormsHost containerForRenderPanel) 
    { 
     model = new Model (containerForRenderPanel); 
    } 

最後模型,我創建一個新的控制,現在我已經從模型中獲取它的手柄:

public class Model : BindableBase 
{ 
    private WindowsFormsHost renderPanelContainer; 

    public WindowsFormsHost RenderPanelContainer 
    { 
     get { return renderPanelContainer; } 
     set { SetProperty(ref renderPanelContainer, value); } 
    } 

    public Model(WindowsFormsHost container) 
    { 
     RenderPanelContainer = container; 
     RenderPanelContainer.Child = new System.Windows.Forms.Panel(); 
    } 
} 

我知道,這種做法違反了MVVM模式。我如何將View的控件的句柄傳遞給我的模型?

+1

模型爲什麼要做與UI相關的工作?在視圖中保持這項工作? – auburg

+0

在我的模型中,我使用一個需要UI控件句柄的外部.dll文件,以直接在此控件上顯示一些內容。 – Zwierzak

+0

您可以提供一種傳遞該信息的方法,例如當創建視圖時,會調用一些虛擬機的方法(然後調用模型方法)。 – Sinatr

回答

0

創建Observable Collection對象類型Panel。將該集合綁定到您的WindowsFormsHost子元素。

+0

所以在ViewModel中,我將創建一個Observable類型面板集合。在創建模型時,它可以返回面板的句柄(面板將在模型內部創建)。然後,該句柄將放入VM中創建的ObservableCollection 。最後,視圖將WinfowsFormsHost綁定到ObservableCollection 。這是一個完全有效的MVVM方法嗎? – Zwierzak

相關問題