2

アイテムのリストを含む WPF のリストボックスがありResultsViewModelますが、これらのオブジェクトの実際のランタイム タイプは

  • CalculateResultsViewModel
  • ScenarioResultsViewModel
  • GraphResultsviewModelなどなど、

これらはすべて基本抽象クラスを拡張しResultsViewModelます。

これらの各ビュー モデルは、異なる でレンダリングListBoxする必要があるため、異なる が必要DataTemplateです。XAML だけで簡単に実行できます。難しいのは、ビューモデルが「処理中」または「失敗した」場合、DataTemplate「処理中」または「エラー」を表示する必要があることですTriggers。これは、これまでのところ .DataTemplateSelectorまたは基本的な XAML スタイルを使用します。

私が考えることができる唯一の解決策は(私が知っているきれいではありません) 、各ビューモデルクラスDataTemplateのメソッドでプログラムで設定するSetResult()ことです。これは、処理が正常に完了したとき、またはエラーが発生したときに呼び出されます。その中で、リターン コードを確認し、成功/失敗の結果に応じてDependencyPropertyプログラムで設定することができます。DataTemplate唯一の問題は、方法がわからないことです

  1. DataTemplateC# コードを使用するだけでリソースを取得しResourceDictionaryます。ウィンドウのコード ビハインド .xaml.cs ファイルではなく、viewmodel クラスからこれらすべてを呼び出すことに注意してください。Window

  2. ビューモデル クラスへのハンドルのみを持っているListBoxItem場合は、それを含む への参照を何らかの形で取得し、プログラムDataTemplateでこのコンテナに を設定します。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

2

暗黙的なデータテンプレートで魔法をかけることができます

<ListBox ItemSource={Binding YourResults}>
  <ListBox.Resources>
    <DataTemplate DataType={x:Type CalculateResultsViewModel}>
      <Grid></Grid>
    </DataTemplate>
    <DataTemplate DataType={x:Type ScenarioResultsViewModel}>
      <Grid></Grid>
    </DataTemplate>
    <DataTemplate DataType={x:Type GraphResultsviewModel }>
      <Grid></Grid>
    </DataTemplate>
  </ListBox.Resources>
</ListBox>

「処理中」または「エラーが発生した」ビューモデルの場合、すべてのデータテンプレートで装飾オーバーレイを指定できます(OKですが、トリガーを使用する必要があります)

お役に立てれば

于 2013-07-29T09:21:19.993 に答える