3

私は現在、私のプロジェクトの計画段階にあります。

テスト容易性、保守性などのために、アプリケーションに MVVM パターンを使用することを考えました。MVVM について理解し始めたばかりですが、計画しているアプリケーションのコンテキストで理解できないことが 1 つあります。

私のアプリケーションは、スポーツ コーチがエクササイズを視覚的にキャプチャできるようにすることで、エクササイズの計画を支援することを目的としています。スポーツトレーナー向けの一種のペイントです。

アプリケーション (たとえば、Ball、Player など) にさまざまな PaintObjects (私はそれを呼んでいます) を実装する方法についてはすでに考えていましたが、それを行う最も便利な方法は、多数の DependencyProperties を持つクラスを作成することであることがわかりました。次に、このクラスに XAML-ControlTemplate を提供します。

ここで、アプリケーションのペイント スクリーンを構造化することを考えると、PaintViewModel.cs で PaintView.xaml のようなものを使用することにしました。問題は、PaintViewModel が PaintObjects をどのように格納するかです。とにかく PaintObjects とは何ですか? それらはViewModel自体ですか?彼らはモデルですか?それらはビューですか?

それは私が完全に思慮深く立ち往生している部分であり、より経験豊富なMVVMユーザーからアドバイスを得ることを望んでいます. 前もって感謝します!

よろしく、クリシュ

4

2 に答える 2

6

VM ( POCO である必要があります) とビューを分離してください。VM は、ビューに強く依存するべきではありません。分離してテストすることが難しくなるためです。

BallViewModelそのため、シーン内のさまざまな断片 ( など) を表すために、VM に何かが必要になりますPlayerViewModel。これらは から公開される可能性があります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 は、DataTemplateが別の場所で定義されており、それぞれSceneObjectViewModelTopandLeftプロパティがあることを前提としています。

于 2009-06-10T14:12:06.747 に答える
0

こんにちは、WPF と Silverlight のこの複合アプリケーション ガイドを見てみてください

その中にMVVMがあり、他のいくつかの...役立つかもしれません。

于 2009-06-10T14:15:31.653 に答える