내 모델에서 일부 이미지를 표시하기 위해 UI 컨트롤 핸들이 필요한 외부 .dll 파일을 사용하고 있습니다. 나는 .dll 관련 로직이 UI가 아닌 모델에 속해 있다고 생각한다.MVVM이 모델에 제어 핸들을 전달합니다.
보기가 있습니다. 이 뷰 안에는 다음이 있습니다.
<WindowsFormsHost x:Name="winformsHost" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5,0,5,0"/>
이제 내 모델에서이 WindowsFromsHost에 배치 될 컨트롤에 대한 핸들이 필요합니다. 그래서 내가 뭐하는 거지 것은 내가 뷰 모델에 윈도우 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 패턴을 위반 한 것으로 알고있다. 보기의 컨트롤에서 모델로 핸들을 전달할 수 있습니까?
모델이 UI 관련 작업을 수행해야하는 이유는 무엇입니까? 그 작업을보기에 유지 하시겠습니까? – auburg
내 모델에서이 컨트롤에 직접 표시하기 위해 UI 컨트롤 핸들이 필요한 외부 .dll 파일을 사용하고 있습니다. – Zwierzak
해당 정보를 전달할 방법을 제공 할 수 있습니다 (예 : View가 생성되면 VM의 일부 메소드가 호출됩니다 (다시 Model 메소드 호출). – Sinatr