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