【问题标题】:How do I change the visual style of a listitem based on its bound value?如何根据绑定值更改列表项的视觉样式?
【发布时间】:2011-03-02 05:10:52
【问题描述】:

我有一个列表框(这里是 xaml):

            <ListBox MinWidth="300" ItemsSource="{Binding Relationships, Mode=OneWay}" 
        SelectedItem="{Binding SelectedRelationship, Mode=TwoWay}" SelectionMode="Single" 
        HorizontalAlignment="Left" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <CheckBox IsChecked = "{Binding IsPrimary}" IsHitTestVisible="False" />
                        <StackPanel Orientation="Horizontal" Grid.Column="1">
                            <TextBlock Text="{Binding RelationshipType}"  FontWeight="Bold"  Margin="0,0,5,0" />
                            <TextBlock Text="{Binding Status}"  FontStyle="Italic" />                           
                        </StackPanel>
                        <TextBlock Text="{Binding UnitName}" Grid.Row="1" Grid.Column="1" />
                        <TextBlock Text="{Binding StartDate, Converter={StaticResource DateConverter}}" Grid.Row="2" Grid.Column="1"/>
                        <TextBlock Text="{Binding RetireDate}" Grid.Row="3" Grid.Column="1" />
                        <TextBlock Text="{Binding EndDate}" Grid.Row="4" Grid.Column="1" />
                        <TextBlock Text="{Binding ReasonForLeaving}" Grid.Row="5" Grid.Column="1" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

我想要做的是让列表框中的每个项目具有 3 个背景之一(如果 IsPrimary 的值 = true,则为绿色,如果 EndDate 值为空,则为橙色,如果 EndDate 值不为空,则为灰色。

有没有办法对列表框项进行模板化,以便它们评估绑定项以确定视图状态或让每个列表框项绑定到我可以为我的视图模型中的每个项设置的值?

感谢您的帮助。

【问题讨论】:

    标签: silverlight mvvm silverlight-4.0 listboxitem


    【解决方案1】:

    我认为您需要将项目 Grid 的背景绑定到 DataContext 的值,并通过转换器将其传递以实现您的逻辑。类似的东西

    <Grid Background="{Binding Converter={StaticResource myItemConverter}}">
       ...
    </Grid>
    

    转换器的外观

    public class MyItemConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var item = value as ItemModel; // [Your ListboxItem Class];
            if (item.IsPrimary)
                return System.Windows.Media.Brushes.Green;
            return item.EndDate.HasValue ? 
                System.Windows.Media.Brushes.Gray : 
                System.Windows.Media.Brushes.Orange;
        }
    }
    

    【讨论】:

    • +1 那会做得很好。不过,Xaml 语法可以稍微整理一下。缺少 " 并关闭 }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2017-01-02
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多