私のモデルでは、いくつかの画像を表示するために、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();
}
}
:、私は、新しいコントロールを作成していますし、今私は、モデルの中から、そのハンドルへのアクセス権を持っています。ビューのコントロールからモデルにハンドルを渡すにはどうしたらいいですか?
モデルがUI関連の作業を行うのはなぜですか?その仕事を見守ってください。 – auburg
私のモデルでは、このコントロールに直接何かを表示するためにUIコントロールのハンドルを必要とする外部の.dllファイルを使用しています。 – Zwierzak
あなたはその情報を渡す方法を提供できます。 Viewが作成されると、VMのメソッドが呼び出されます(Modelメソッドを呼び出します)。 – Sinatr