Привязка данных Silverlight - Как динамически изменить стиль элементов на основе предыдущих элементов? - PullRequest
1 голос
/ 14 февраля 2011

У меня есть ListBox, который содержит алфавитный список слов.Для каждой буквы я бы хотел, чтобы первое слово было синим, а все остальные слова - белым.Ранее я делал это, просматривая слова, создавая элементы управления TextBlock с соответствующим цветом переднего плана и добавляя их вручную в элемент управления ListBox.Я хотел бы сделать это с привязкой данных, хотя.Есть ли элегантный способ применить этот вид условного форматирования с привязкой данных?

1 Ответ

1 голос
/ 14 февраля 2011

Это та вещь, для которой вы обычно используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...