2016-07-12 9 views
0

私のモデルでは、いくつかの画像を表示するために、UIコントロールのハンドルを必要とする外部の.dllファイルを使用しています。私は.dll関連のロジックがモデルに属していると思う - UIではない。モデルにコントロールハンドルを渡すMVVM

私はビューを持っています。このビューの内部に私は持っています:

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

私のモデルでは、このWindowsFromsHostに配置されるコントロールへのハンドルが必要です。それでは、私がやっていることは、私はViewModelににWindowsのFormsHostへの参照を渡しています:

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

その後のViewModelに、私がモデルに渡しています:

モデルで最後に
public MainWindowViewModel (WindowsFormsHost containerForRenderPanel) 
    { 
     model = new Model (containerForRenderPanel); 
    } 

私はこのアプローチはMVVMパターンに違反していることを知っている

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(); 
    } 
} 

:、私は、新しいコントロールを作成していますし、今私は、モデルの中から、そのハンドルへのアクセス権を持っています。ビューのコントロールからモデルにハンドルを渡すにはどうしたらいいですか?

+1

モデルがUI関連の作業を行うのはなぜですか?その仕事を見守ってください。 – auburg

+0

私のモデルでは、このコントロールに直接何かを表示するためにUIコントロールのハンドルを必要とする外部の.dllファイルを使用しています。 – Zwierzak

+0

あなたはその情報を渡す方法を提供できます。 Viewが作成されると、VMのメソッドが呼び出されます(Modelメソッドを呼び出します)。 – Sinatr

答えて

0

オブジェクト型の観測可能なコレクションを作成します。パネル。あなたのWindowsFormsHost子要素にそのコレクションをバインドします。

+0

ViewModelでは、Observable Type Panelのコレクションを作成します。モデルを作成すると、パネルにハンドルを返すことができます(パネルはモデル内に作成されます)。このハンドルは、VMで作成されたObservableCollection に入れられます。最後に、ビューはWinfowsFormsHostをObservableCollection にバインドします。これは完全に有効なMVVMのアプローチですか? – Zwierzak

関連する問題