0

MVMM Lightツールキットを初めて使用します(.NET 3.5でLightを使用していることに注意してください)。これまでのところ、2つの課題を除いてパターンが本当に好きになり始めています。

  • アプリケーションの特定の種類のページに再利用可能なXAMLテンプレートが必要です。映画のチケットキオスクを考えてみてください。メインコンテンツは中央にありますが、ほとんどの場合、キャンセルまたは戻るための画面上のボタン。再利用可能なグリッドが欲しいのですが、新しいページを作成するときに、基本的にそのグリッドレイアウトをインポートし、一般的なビットについて心配する必要はなく、自分の部分に集中できます。少し調べてみるのもいい<ContentPresenter>かもしれませんが、それでも私には異質です。

  • 私が最初のチャレンジに成功したと仮定すると、これらの一般的なアイテム(Cancelボタンなど)のデータコンテキストは、コードの重複を避けるために、そのページのViewModel以外の場所にあると思います。個々のコントロールを取得し、XAMLとは異なるビューモデルを参照するための最良のアプローチですか?何かのようなもの...

    <Button ... DataContext={Binding CommonStuffVM, Source={StaticResource Locator}} />

4

1 に答える 1

1

Templatesまたはを使用DataTemplatesして、オブジェクトの外観を定義する再利用可能なテンプレートを作成できます。

例えば、

<DataTemplate DataType="{x:Type local:MovieTicket}">
    <!-- Write the XAML for your Movie Ticket -->
</DataTemplate>

を指定してDataTemplate、またはx:Keyで具体的に参照するか、省略して、WPFがオブジェクトを描画しようとするたびに使用されるようにすることができます。ItemTemplateContentTemplateMovieTicket

<ItemsControl ItemsSource="{Binding MovieTickets}" />

<ContentControl Content="{Binding SelectedMovieTicket}" />

2番目の質問については、これは個々のコントロールにとっては悪い考えだと思いますが、プログラムの完全なセクションでは一般的な方法です。

MVVMを使用する場合、あなたViewModelsはアプリケーションであり、UIではありません。

ユーザーが編集できるリストをウィンドウに表示しMovies、ユーザーが変更を保存またはキャンセルできるようにする場合は、ViewModelにとを含める必要がありObservableCollection<Movie>ます。ICommand SaveCommandICommand CancelCommand

ビューにViewModelのみを反映させ、ViewModel階層全体から必要なデータをプルさせないようにする必要があります。

あなたの質問に基づいて、あなたは私がMVVMでのナビゲーションについて持っているブログ記事に興味があるかもしれません。それはあなたが尋ねているものと非常によく似たコードを使用します。暗黙を使用してUIを変更する方法を示しDataTemplates、MVVMアーキテクチャのより良いアイデアを得るためにダウンロードして確認できる完全なコードサンプルが含まれています。

于 2013-03-26T15:49:30.477 に答える