1

我有一个列表框(这里是 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 值不为空,则为灰色。

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

谢谢你的帮助。

4

1 回答 1

3

我认为您需要将项目 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;
    }
}
于 2010-06-10T17:20:51.890 回答