2010-06-10 110 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