1
我有以下XAML代码:绑定在列表框中用的TextBlocks不工作
<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中存储简单的消息日志字符串,而是创建了一个包含Message和Color成员的新类(LogItems)。现在LogCollection是typeof LogItems而不是字符串。
我填充用下面的代码列表框在我的视图模型:
LogItems logitem = new LogItems(myMessage, myColor);
LogCollection.Insert(0, logitem);
和视图具有以下形式。此外,它不再需要使用RelativeSource,因为datacontext是相同的。
<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>
谢谢大家给我的解答。
绑定现在可以使用。不幸的是,前景应用于整个列表框项目而不是仅仅一个项目。我试图将其更改为ListView,并得到相同的结果。 – alexandrudicu 2012-01-10 09:07:17
你想达到什么目的?如果每个项目应具有自己的颜色,则应在LogCollection中的项目上引入MyColor属性。否则:哪个项目应该着色? – Jens 2012-01-10 09:35:51