在我的模型中,我使用外部.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模式。如何将视图控件中的句柄传递给我的模型?
答案 0 :(得分:0)
创建对象类型Panel的Observable Collection。将该集合绑定到您的WindowsFormsHost子元素。