我有一个ListBox,其中包含按字母顺序排列的单词列表。对于每个字母,我希望第一个单词是蓝色,所有其他单词是白色。之前我通过循环显示单词,使用适当的Foreground颜色创建TextBlock控件,并手动将它们添加到ListBox控件来完成此操作。不过,我想用数据绑定来做这件事。有没有一种优雅的方法来应用这种带数据绑定的条件格式?
答案 0 :(得分:1)
这是您通常使用ViewModel的类型。你可以做的是创建一个看起来像这样的WordViewModel类(但可能是使用INotifyPropertyChanged实现等):
public class WordViewModel
{
public string Word {get; set;}
public Color ForegroundColor {get; set;}
}
当您将WordViewModel
个实例添加到ObservableCollection<WordViewModel>
时,您将根据之前使用的大致相同的逻辑设置相应的属性。
你的ListBox看起来像这样:
<ListBox ItemsSource="{Binding MyWords}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Word}" ForegroundColor="{Binding ForegroundColor}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在模型中使用“ForegroundColor”当然会完全违反“关注点分离”。如果有一个干净简单的方法,那么在View中最合适。但鉴于这种情况,除非有人能想出更好的方法在XAML中处理它,否则我认为将它放在ViewModel中是合理的。