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