У меня есть следующий код xaml:
<ListBox Foreground="{Binding MyColor, Converter={local:ColorConverter}}" ItemsSource="{Binding LogCollection, Mode=TwoWay}" Grid.Row="1">
</ListBox>
Это меняет цвет переднего плана для всего списка, поэтому я изменил код следующим образом:
<ListBox ItemsSource="{Binding LogCollection, Mode=TwoWay}" Grid.Row="1">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="{Binding MyColor, Converter={local:ColorConverter}}" Text="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Таким образом, я хотел установить передний план для элемента вместо всего списка, но он не работает. Как мне найти правильный текст данных? MyColor - это свойство моей MainViewModel.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ С РЕШЕНИЕМ
Ответ Дженса был тем, который показал мне, где я был неправ. Вместо того, чтобы хранить простые строки журнала сообщений в ObservableCollection, я создал новый класс (LogItems), который содержит элементы Message и Color. Теперь LogCollection является типом LogItems вместо строк.
Я заполняю список следующим кодом в моей модели представления:
LogItems logitem = new LogItems(myMessage, myColor);
LogCollection.Insert(0, logitem);
И вид имеет следующую форму. Также больше не требуется использовать RelativeSource, потому что текст данных одинаков.
<ListBox ItemsSource="{Binding LogCollection, Mode=TwoWay}" Grid.Row="1">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Foreground="{Binding Path=Color, Converter={local:ColorConverter}}" Text="{Binding Path=Message}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Спасибо всем за ответы, которые привели меня к этому решению.