Silverlight数据绑定 - 如何根据以前的元素动态更改元素的样式?

时间:2011-02-14 04:14:12

标签: silverlight data-binding windows-phone-7

我有一个ListBox,其中包含按字母顺序排列的单词列表。对于每个字母,我希望第一个单词是蓝色,所有其他单词是白色。之前我通过循环显示单词,使用适当的Foreground颜色创建TextBlock控件,并手动将它们添加到ListBox控件来完成此操作。不过,我想用数据绑定来做这件事。有没有一种优雅的方法来应用这种带数据绑定的条件格式?

1 个答案:

答案 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中是合理的。