2010-06-10 109 views
1

我有一个列表框(这里的XAML):如何根据其绑定值更改listitem的视觉样式?

  <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> 

我想要做的是有ListBox中的每个项目有3个背景(绿色的,如果,如果结束日期的值isPrimary =的值为true,橙如果EndDate值不为空,则值为空且灰色

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

感谢您的帮助。

回答

3

我认为您需要将项目的网格背景绑定到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; 
    } 
} 
+0

+1那将很好地做到这一点。尽管Xaml语法可以做一些整理。失踪“,并关闭} – AnthonyWJones 2010-06-10 23:34:06

+0

谢谢安东尼 - 现在修复它:) – kiwipom 2010-06-11 03:46:34

相关问题