Я хотел бы заполнить WPF ListView строками, используя привязку данных. Мой код выглядит так (и работает!;)):
Xaml:
<ListView
ItemsSource="{Binding Entries}">
</ListView>
Я пропустил некоторый код для лучшего обзора.
Записи IList<string>
.
Пока все работает нормально. Теперь возникает проблема: строка в Entries может содержать определенное ключевое слово, которое указывает, что эта строка хочет отображаться с красным фоном внутри ListView. Скажем, у нас есть метод GetBackground (string s), который возвращает Color в зависимости от строки.
Как заставить ListView отображать свои элементы в правильном цвете.
Моя первая идея состояла в том, чтобы иметь конвертер, преобразующий мою строку в цвет, используя вышеупомянутый метод. Куда мне добавить этот конвертер и как передать строку в конвертер в качестве параметра? моя первая идея была:
<ListView
ItemsSource="{Binding Entries, Converter={StaticResource entryToColourConverter},
ConverterParameter=???}"
</ListView>
У кого-нибудь есть идеи, как это можно сделать? Я на правильном пути?
С наилучшими пожеланиями,
Christian
РЕДАКТИРОВАТЬ 1:
Изменен код (как первый шаг) в сторону:
<UserControl.Resources>
<DataTemplate x:Key="entryTemplate">
<TextBlock
Text="{Binding}"
Background="Green"/>
</DataTemplate>
</UserControl.Resources>
...
<ListView
ItemsSource="{Binding Entries}"
ItemTemplate="{StaticResource entryTemplate}>
</ListView>
Однако это не работает вообще. Даже если я изменю текст на какое-то статическое значение, результат будет таким же, как и в предыдущем коде.
РЕДАКТИРОВАТЬ 2:
Я нашел проблему, мой код выглядел так:
<ListView x:Name="lvEntries"
ItemTemplate="{StaticResource EntriesTemplate}"
ItemsSource="{Binding Entries, NotifyOnTargetUpdated=True}">
<ListView.View>
<GridView x:Name="gvEntries">
<GridViewColumn
HeaderContainerStyle="{StaticResource hcs}"
Header="Entry"
TextBlock.TextAlignment="Left">
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
И этот ListView.View был проблемой. После удаления все работало! :) Теперь я должен выяснить, как решить эту проблему без ListView.View