私のアプリケーションでは、シリアル、OPC、USB デバイスなどのさまざまな I/O デバイスのコレクションが必要です。MEF フレームワークを使用して、コレクションを処理し、新しいデバイスを追加できるようにしました。
私のプロジェクトは次のようになります。
Atf.Model 'contains the model
Atf.Gui 'the views and view-models
Atf.Devices 'contains implementations of IDevice and exports them
多くのデバイスは構成を必要とするため、デバイス インターフェイスはカスタム コントロールへのパスと、デバイス構成の編集を処理する対応するビュー モデルを公開します。私はMVVMパターンに固執しようとしており、ビューとモデルを可能な限り分離したいと考えています。同時に、デバイス コレクションとの結合をできるだけゆるく保ちたいと考えています。
にAtf.Gui
は、検出されたすべてのデバイスを表示し、アクティブ化されたデバイスを表示するコントロールがあります。アクティブ化されたデバイスが選択されたときに、そのエディターを動的に表示したいと考えています。
どうすればこれを行うことができますか? ここにいくつかの(クレイジーな)アイデアがあります:
アイデア-1UserControl
デバイス オブジェクトのパスを使用して、ビュー モデルにa をロードするだけです。これにより、MVVM の分離が壊れ、その部分が「テスト不能」になります。
public System.Windows.Controls.UserControl ConfigureControl
{
get
{
// code to load the UserControl using the path property
}
}
アイデア 2デバイスでビュー モデルのみを公開し、マッピング (デバイス リポジトリで定義) を使用してビューを取得します。これがどのように行われるかわかりません。
<myeditorcontainer>
<ContainerControl Content="{Binding CurrentlySelectedDeviceViewModel}"/>
</myeditorcontainer>
アイデア 3私の見解では、バインディングを使用してコントロールをロードします。これがまったく可能かどうかはわかりません。
<myeditorcontainer>
<UserControl Path="{Binding CurrentlySelectedDeviceViewPath}"
DataContext="{Binding CurrentlySelectedDeviceViewModel}"/>
</myeditorcontainer>