我想使用数据绑定用字符串填充WPF ListView。我的代码看起来像这样(并且工作!;)):
的Xaml:
<ListView
ItemsSource="{Binding Entries}">
</ListView>
我省略了一些代码以获得更好的概述。
参赛作品为IList<string>
。
到目前为止,一切正常。现在出现了问题:条目中的字符串可能包含一个特定的关键字,表示此字符串希望在ListView中以红色背景显示。假设我们有一个方法GetBackground(string s),它根据字符串返回一个Color。
如何让ListView以正确的颜色显示其项目。 我的第一个想法是使用上述方法将转换器转换为颜色。我必须在哪里添加此转换器,如何将字符串作为参数传递给转换器?我的第一个想法是:
<ListView
ItemsSource="{Binding Entries, Converter={StaticResource entryToColourConverter},
ConverterParameter=???}"
</ListView>
有谁知道如何做到这一点?我是在正确的轨道上吗?
祝福, 基督教
编辑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
的情况下解决这个问题答案 0 :(得分:4)
<Window.Resources>
<local:EntryToBackgroundConverter x:Key="EntryToBackgroundConverter"/>
<DataTemplate x:Key="EntryTemplate">
<TextBlock Text="{Binding .}" Background="{Binding ., Converter={StaticResource EntryToBackgroundConverter}}"/>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView ItemsSource="{Binding Entries}" ItemTemplate="{StaticResource EntryTemplate}"></ListView>
</Grid>
转换器:
public class EntryToBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string stringValue = value as string;
if (string.IsNullOrEmpty(stringValue))
return Brushes.Black;
if (stringValue == "foreach")
return Brushes.Blue;
if (stringValue == "if")
return Brushes.Blue;
return Brushes.Black;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}
你说的是正确的......这样的事情应该有用......
答案 1 :(得分:0)
为ListView创建项目模板,然后将(例如)label的文本颜色绑定到Entrie属性