更改列表框中项目属性的问题

时间:2012-02-01 14:36:37

标签: c# silverlight windows-phone-7

我已经创建了一个列表框,我可以相应地动态添加和删除项目UI更改并且工作正常。

<ListBox Name="MsgsList" ItemsSource="{Binding Items}" Style="{StaticResource MsgsBoxStyle}">
    <ListBox.ItemTemplate>
        <DataTemplate x:Name="MsgsDataTemplate">
            <StackPanel Tag="{Binding MsgTagInfo}" ManipulationCompleted="StackPanel_Msgs_ManipulationCompleted">

                <toolkit:GestureService.GestureListener>
                    <toolkit:GestureListener Hold="GestureListener_Hold" Tap="GestureListener_Tap"/>
                </toolkit:GestureService.GestureListener>

                <Grid x:Name="ContentPanelInner" Grid.Row="1" Width="500">
                    <StackPanel x:Name="stackPanelInner" Width="500">

                        <Grid VerticalAlignment="Top" Width="500">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition />
                            </Grid.ColumnDefinitions>

                            <TextBlock Grid.Column="0" Text="{Binding MsgTitle}" Style="{StaticResource MsgLine1}"  />
                            <TextBlock Grid.Column="1" Text="{Binding MsgDate}" Style="{StaticResource MsgDate}" />
                        </Grid>
                        <TextBlock Text="{Binding MsgBody}" Style="{StaticResource MsgLine2}" />
                    </StackPanel>
                </Grid>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

但我不明白如何更改特定项目的文本块的样式,比如基于某些条件,如果我想更改特定项目的文本框的颜色,不知道如何访问它。

有人可以帮我这个吗?感谢。

2 个答案:

答案 0 :(得分:2)

可能不是最简单的方法,但可以说从关注点分离的角度来看,最简洁的方法是使用转换器,然后将其绑定到要监控的属性......

例如,如果您的模型基于名为myProperty的布尔属性更改状态,则可以使用类似的内容。

<StackPanel Background={Binding myProperty, Converter={StaticResource myBindingConverter}" />

您的转换器应根据您的属性值返回SolidColorBrush。

public class AlternateRowColour : IValueConverter
{
    SolidColorBrush normal = new SolidColorBrush(Colors.Transparent);
    SolidColorBrush highlighted = new SolidColorBrush(Color.FromArgb(255, 241, 241, 241));

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var myValue = (bool)value
        return myValue ? highlighted : normal ;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

答案 1 :(得分:1)

I如果您只想更改项目样式的某个方面(例如其颜色),则可以将其公开为您要绑定的模型对象的属性。例如,添加属性TextColor并按如下方式绑定它:

<TextBlock Text="{Binding MsgBody}" Style="{StaticResource MsgLine2}">
  <TextBlock.Color>
    <SolidColorBrush Color="{Binding TextColor}"/>
  </TextBlock.Color>
</TextBlock>

这将优先于通过样式定义的颜色。