我刚尝试了这样一个场景,确实在该事件上,行的颜色被更改了。但在下一次编辑时,新行的颜色也会更改。因此,现在我们有两行的背景设置为YellowGreen。
一个建议是将行定义为全局变量。
private DataGridRow row;
private void dgArtikel_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (row != null)
row.Background = Brushes.White;
listViewItems itm = (listViewItems)dgArtikel.SelectedItem;
row = dgArtikel.ItemContainerGenerator.ContainerFromItem(itm) as DataGridRow;
row.Background = Brushes.YellowGreen;
}
这样,过去编辑的行将返回其初始颜色。但我不确定这是否完全符合您的要求。
您可以尝试在模型中添加一个已选标志:
private bool _IsChecked;
public bool IsChecked
{
get { return _IsChecked; }
set
{
_IsChecked = value;
PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
}
}
定义一个转换器:
public class BoolToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool val = (bool) value;
if (val)
return Brushes.GreenYellow;
else
{
return Brushes.White;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
并为DataGridRow添加样式:
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="{Binding IsChecked, Converter={StaticResource BoolToColorConverter}}"></Setter>
</Style>
在 RowEditEnding 中,您可以将模型中的 IsChecked 设置为 true,但是我不知道您想在何时或何处将其设置回 false。我不知道您的具体情况,但这些信息可能会有所帮助。祝你好运!