2009-05-19 17 views
0

我有一個GridView一個ListView它:編程方式更改單個ListViewItem的佈局

<ListView x:Name="listViewPersons" ItemsSource="{Binding Path=Persons, Mode=OneWay}" IsSynchronizedWithCurrentItem="True" 
        Height="Auto" HorizontalAlignment="Stretch" Margin="4,4,4,4" Grid.Row="4" VerticalAlignment="Stretch" Width="Auto"> 
      <ListView.View> 
       <GridView x:Name="gridViewPersons"> 
        <GridViewColumn Header="Enabled"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <CheckBox HorizontalAlignment="Center" IsChecked="true" /> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}" Width="142" /> 
        <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Path=Age}" Width="142" /> 
        <GridViewColumn Header="Gender" DisplayMemberBinding="{Binding Path=Gender}" Width="142" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

我希望能夠以編程方式更改每個ListViewItem S(或在網格中的行)的背景還是重點講來任何顏色我想,例如

listViewPersons.Items[0].Background = Brush.Red; 
listViewPersons.Items[1].Background = Brush.Blue; 
listViewPersons.Items[2].Background = Brush.Green 

我知道的代碼前面的行不工作,但它幾乎解釋了我想達到的目標。任何幫助?

謝謝!

回答

2

如何對這種做法:

  1. 綁定ForegroundColor和背景顏色在人的屬性。讓我們調用這個屬性PersonStatus,並將其類型設置爲狀態枚舉,就這個例子。
  2. 確保此人員執行INotifyPropertyChanged,並且該屬性的設置者引發ProperyChanged事件。該物業將是這樣的:

    public Status PersonStatus 
    { 
        get 
        { 
         return status; 
        } 
        set 
        { 
         if (value != status) 
         { 
          status= value; 
          if (PropertyChanged != null) 
           PropertyChanged(this, new PropertyChangedEventArgs("PersonStatus")); 
         } 
        } 
    } 
    
  3. 創建IValueConverter這需要狀態的類型,並返回一個Brushes.Black,Brushes.Red等事情是這樣的:

    public class StatusToColorConverter : IValueConverter 
    { 
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
         if (targetType != typeof(Status)) 
          throw new InvalidOperationException("targetType must be Status"); 
    
         Status status = (Status)value; 
    
         switch (status) 
         { 
          case Status.New: 
           return Brushes.Black; 
          case Status.Professional: 
           return Brushes.Blue; 
          case Status.Delete: 
           return Brushes.Red; 
          default: 
           return Brushes.Black; 
         } 
        } 
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
         throw new NotImplementedException(); 
        } 
    } 
    
相關問題