下午好。再次需要你的帮助。
以下代码无法正常工作:
XAML:
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding Path=IsTypeCopied[0], Converter={StaticResource IntToBrushConverter}}"/>
</Style>
</DataGridTextColumn.CellStyle>
IntToBrushConverter 类:
class IntToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool b = (bool)value;
if (b)
{
return Brushes.LightGreen;
}
else
{
return Brushes.Silver;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
还有一个实现 INotifyPropertyChanged 的 Worker 类
public class Worker : INotifyPropertyChanged
{
private bool[] _IsTypeCopied;
public bool[] IsTypeCopied
{
get { return _IsTypeCopied; }
set
{
_IsTypeCopied = value;
OnPropertyChanged("IsTypeCopied");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public Worker()
{
IsTypeCopied = new bool[7];
}
}
IsTypeCopied 更改发生在以下函数中:
private void gridWorker_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
int index;
try
{
index = gridWorker.CurrentCell.Column.DisplayIndex;
}
catch (NullReferenceException)
{
return;
}
if (index < 6) return;
Worker SelectedWorker = (Worker)gridWorker.SelectedItem;
if (SelectedWorker.isSelected)
SelectedWorker.IsTypeCopied[index - 7] = true;
}
首次将列表加载到 DataGrid 中时,单元格的颜色为银色。但是将 IsTypeCopied 从 false 更改为 true 不会着色为 LightGreen。最有趣的是,如果 IsTypeCopied 是通过以下方式声明的:
private bool _IsTypeCopied;
public bool IsTypeCopied
{
get { return _IsTypeCopied; }
set
{
_IsTypeCopied = value;
OnPropertyChanged("IsTypeCopied");
}
}
然后此代码按预期工作,但有 7 个单元格需要着色。我想通过一个数组来做到这一点。
一般来说,我在使用数组时解决了这个问题,添加到函数中
下一行: