我有一个我正在学习的银色手机应用程序。它使用Web服务来获取数据。我有一个网格,里面有一个列表框。我希望能够将该列表框中的一些文本设置为基于条件的特定颜色。
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox x:Name="MainListBox" Margin="0,0,-12,0" SelectionChanged="MainListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding Operation}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding DateTimeStart1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding DataID}" Visibility="Collapsed"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
所以如果绑定到Status的文本块..如果那个status = true我想改变行的颜色甚至只是那个文本框....更容易。
我使用以下代码绑定数据
Me.MainListBox.ItemsSource = e.Result
任何帮助都会很棒
~~~~~~~~~~~~~~~~~~~~~~~~~~ 这是修改后的代码
Private Class SomeData
Inherits wsData.Data_Queries
Public Property RowColor As SolidColorBrush
End Class
这里是我创建类的新实例并将其绑定到列表框
的地方 Dim oSomeDataS As New List(Of SomeData)
For Each x In e.Result
Dim oSomeData As New SomeData
With x
oSomeData.DataID = .DataID
oSomeData.DateTimeStart1 = .DateTimeStart1
oSomeData.FinishFromStart = .FinishFromStart
oSomeData.Operation = .Operation
oSomeData.ShortDate = .ShortDate
oSomeData.Status = .Status
oSomeData.TblComputerNameID = .TblComputerNameID
oSomeData.TblOperationID = .TblOperationID
oSomeData.TblStatusID = .TblStatusID
oSomeData.TblSiteID = .TblSiteID
If .Status = "False" Then
oSomeData.RowColor = New SolidColorBrush(Colors.Red)
Else
oSomeData.RowColor = New SolidColorBrush(Colors.Green)
End If
oSomeDataS.Add(oSomeData)
End With
Next
Me.MainListBox.ItemsSource = oSomeDataS.OrderBy(Function(o) o.Operation)
和XAML代码
<ListBox x:Name="MainListBox" Margin="0,0,-12,0" SelectionChanged="MainListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding Operation}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Status}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}" Foreground="{Binding RowColor}"/>
<TextBlock Text="{Binding DateTimeStart1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
<TextBlock Text="{Binding DataID}" Visibility="Collapsed"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
有很多不同的方法可以做到这一点。最容易理解的是使用IValueConverter
将行的背景颜色绑定到基于状态的颜色。可以找到一个很好的例子here(示例是WPF,但同样的原则适用于Silverlight)。
另一种方法是将您的数据对象(您从e.Result获得)包装在ViewModel对象中。 ViewModel对象将公开与数据相同的所有属性,但也会添加一个属性(可能是RowColor
),其中getter根据Status
的值返回Brush或Color。您必须遍历e.Results并为每个创建一个新的ViewModel,将ViewModel添加到列表中,然后将ItemsSource设置为新的ViewModel列表。