在我的模型中,我使用需要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的控件的句柄傳遞給我的模型?
模型爲什麼要做與UI相關的工作?在視圖中保持這項工作? – auburg
在我的模型中,我使用一個需要UI控件句柄的外部.dll文件,以直接在此控件上顯示一些內容。 – Zwierzak
您可以提供一種傳遞該信息的方法,例如當創建視圖時,會調用一些虛擬機的方法(然後調用模型方法)。 – Sinatr