MVVM将控制句柄传递给模型

时间:2016-07-12 13:06:08

标签: c# wpf mvvm

在我的模型中,我使用外部.dll文件,该文件需要处理UI控件才能在其上显示一些图像。我猜.dll相关的逻辑属于模型 - 而不是UI。

我有一个视图。在这个观点中,我得到了:

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

现在,在我的模型中,我需要将控件的句柄放在这个WindowsFromsHost中。所以我正在做的是我将Windows FormsHost的引用传递给ViewModel:

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

然后在ViewModel中,我将它传递给Model:

    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模式。如何将视图控件中的句柄传递给我的模型?

1 个答案:

答案 0 :(得分:0)

创建对象类型Panel的Observable Collection。将该集合绑定到您的WindowsFormsHost子元素。