以下是一个详细的示例:
我正在使用一个ItemsControl在我的View中动态创建一个简单的条形图,并将项绑定到我的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 中为每个百分比创建一个 BarViewModel,并传递从我的颜色集合创建的适当的 ColorBrush。
然后在 Xaml 中,我将创建一个简单的 ItemsTemplate 来绑定这些属性。
现在,因为它包含 SolidColorBrush 类型的属性,我的 ViewModel 依赖于 Presentation framework,如果我想在另一个环境中使用它,则必须进行更改。
因此,这是否违反了 MVVM 最佳实践,还是可以接受的(你必须画一条线,否则事情就会变得太复杂)
我只是想知道其他人对此有什么看法,是否有其他解决方案可以使 ViewModel 完全不了解 Presentation Layer 而不会过于复杂。我可以想象 ValueConverters 可以帮助解决这个问题?