詳細を説明するケースの例を次に示します。
ビューで ItemsControl を使用して単純な棒グラフを動的に作成し、BarGraphViewModel で項目を BarViewModels (それぞれパーセンテージ値を含む) のコレクションにバインドしています。各バーは異なる色にする必要があります。色はコレクションから選択する必要があります。{Color1, Color2, ..}
コレクション自体は一定ですが、バーの数は状況によって異なります。
簡単な解決策は、次のような単純な BarViewModel を作成することです。
public class BarViewModel
{
public int Percentage { get; set; }
public SolidColorBrush Stroke { get; private set; }
public BarGraphViewModel(SolidColorBrush stroke)
{
Stroke = stroke;
}
}
(簡潔にするために、変更されたプロパティと検証の実装を省略しました)
これで、BarGraphViewModel からパーセンテージごとに BarViewModels を作成し、Color コレクションから作成した適切な ColorBrush を渡すことができました。
次に、Xaml で、これらのプロパティにバインドする単純な ItemsTemplate を作成します。
今だけ、SolidColorBrush 型のプロパティが含まれているため、ViewModel はプレゼンテーション フレームワークに依存しており、別の環境で使用する必要がある場合は変更する必要があります。
したがって、これはMVVMのベストプラクティスを破っていますか、それとも許容できますか(どこかで線を引くか、物事が複雑になりすぎます)
他の人がこれについてどう思うか、また複雑になりすぎずにViewModelがプレゼンテーションレイヤーを完全に認識しないようにする他のソリューションがあるかどうかを知りたかっただけです。ValueConverters が役立つと想像できますか?