2016-07-12 1 views
0

내 모델에서 일부 이미지를 표시하기 위해 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 패턴을 위반 한 것으로 알고있다. 보기의 컨트롤에서 모델로 핸들을 전달할 수 있습니까?

+1

모델이 UI 관련 작업을 수행해야하는 이유는 무엇입니까? 그 작업을보기에 유지 하시겠습니까? – auburg

+0

내 모델에서이 컨트롤에 직접 표시하기 위해 UI 컨트롤 핸들이 필요한 외부 .dll 파일을 사용하고 있습니다. – Zwierzak

+0

해당 정보를 전달할 방법을 제공 할 수 있습니다 (예 : View가 생성되면 VM의 일부 메소드가 호출됩니다 (다시 Model 메소드 호출). – Sinatr

답변

0

오브젝트 유형 Panel의 Observable Collection을 작성하십시오. 컬렉션을 Yours WindowsFormsHost 자식 요소에 바인딩합니다.

+0

그래서 ViewModel에서 Observable Type Panel 컬렉션을 생성 할 것입니다. 모델을 생성 할 때 패널에 핸들을 반환 할 수 있습니다 (패널은 모델 내부에서 생성됩니다). 그런 다음이 핸들은 VM에 생성 된 ObservableCollection 에 저장됩니다. 마지막으로, 뷰는 WinfowsFormsHost를 ObservableCollection 에 바인딩합니다. 이것은 완전히 유효한 MVVM 접근 방식입니까? – Zwierzak

관련 문제