我有一个ListView
,其中包含GridView
:
<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
我知道前面的代码行不起作用,但它几乎解释了我想要实现的目标。有什么帮助吗?
谢谢!
答案 0 :(得分:2)
这种方法怎么样:
确保此人员实施INotifyPropertyChanged,此属性的setter会引发ProperyChanged事件。该物业将如下所示:
public Status PersonStatus
{
get
{
return status;
}
set
{
if (value != status)
{
status= value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("PersonStatus"));
}
}
}
创建一个IValueConverter,它采用Status类型并返回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();
}
}