質問

私は私のプロジェクトの計画段階で、現在です。

私は、私が唯一のMVVMのまわりで私の頭を取得し始めているが、私はちょうど私の計画アプリケーションのコンテキストで把握することはできません一つのことがあると、テスト容易化のために自分のアプリケーションのための保守性などをMVVMパターンを使用して考えましたます。

私のアプリケーションは、それらをキャプチャ演習を視覚的にすることによって、その運動計画とスポーツのコーチを支援することを目指しています。それは、スポーツトレーナーのためのペイントのようなものだ。

(:ボール、プレーヤーなどなど)と、それは数字でクラスを記述で行うための最も便利な方法を発見した

私はすでに別のPaintObjectsを実装する方法について考えて自分のアプリケーションのために(それは私がそれらを呼び出すものです) DependencyPropertiesのし、このクラスのXAML-のControlTemplateを供給する。

今、私は自分のアプリケーションのペイント画面を構成について考えるとき、私は私がPaintViewModel.csでPaintView.xamlのようなものを使用と考えました。今の質問はどのようにPaintViewModelがPaintObjectsを格納しないのですか? PaintObjectsは、とにかく何ですか?彼らは自分たちのviewmodelsていますか?彼らのモデルはありますか?彼らは見ていますか?

それは私が完全にこだわっthoughtwiseだとより多くの経験を積んだMVVM、ユーザーによっていくつかのアドバイスを得ることを望ん部分です。事前に感謝します!

敬具、 crischu

役に立ちましたか?

解決

はPOCOSする必要がありますあなたのVM間の分離を(キープの)とビュー。それが孤立してそれらをテストすることが難しくなるので、あなたのVMは、あなたの意見に強い依存関係を持つべきではありません。

だからの音によって、あなたは(BallViewModelエトセトラ、PlayerViewModel)あなたのシーンで様々なこまごまとを表現するために、あなたのVMで何かをする必要があります。これらは、SceneViewModelから露出される可能性があります:

public class SceneViewModel : ViewModel
{
    public ICollection<SceneObjectViewModel> SceneObjects
    {
        get { ... }
    }

    ...
}

public abstract class SceneObjectViewModel : ViewModel
{
    ...
}

public class BallViewModel : SceneObjectViewModel
{
    ...
}

次に、あなたのSceneViewは、そのコレクションに結合し、DataTemplateを使用して、各アイテムをレンダリングするでしょう。

<ItemsControl ItemsSource="{Binding SceneObjects}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="Canvas.Top" Value="{Binding Top}"/>
            <Setter Property="Canvas.Left" Value="{Binding Left}"/>
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

上記のXAMLは、あなたのDataTemplatesが他の場所で定義されていると仮定し、各SceneObjectViewModelTopLeft性質を持っていること。

scroll top