如何在数据网格中突出显示已编辑的单元格

时间:2012-07-10 10:19:59

标签: datagrid cell wpf-4.0

如何突出显示已编辑的DataGrid中的单元格?使用触发器通过某种样式的XAML解决方案更可取。但如果不可能,那么代码背后的方法就足够了。

我没有发布任何代码,因为我没有突破问题。

1 个答案:

答案 0 :(得分:0)

答案只是创建一个定位DataGridCell的样式并通过绑定触发条件,希望以下步骤很容易理解:

//lets say you bind datagrid to 
List<RowValues> RowsView {get;}
//were RowValues is
List<RowValue> RowValues
// and RowValue is 
public class RowValue
{
   public bool IsEdited 
   {
      get {return _isEdited;}
      set
      {
         if(_isEdited== value) return;
         _isEdited= value;
          RaisePropertyChanged(()=>IsEdited);
      }
   }
   public string Value 
   { 
      get {return _value;}
      set
      {
         if(_value == value) return;
         _value = value;
       //check if the value is edited
       IsEdited = _value == _originalValue;
       RaisePropertyChanged(()=>Value);
      }
   }

}

//so in code accessing the structure would look like:
var row = RowView[0];
var cell = row[1];
 cell.IsEdited... just to make it easier to see the XAML bindings below..


<DataGrid ItemsSource="{Binding RowsView}">
    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellStyle>
          <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Background" Value="Transparent" />
          <Style.Triggers>
          <DataTrigger Binding="{Binding RowValues[0].IsEdited}" Value="True">
             <Setter Property="Background" Value="{StaticResource MissingDataBrush}"/>
           </DataTrigger>
      </Style.Triggers>
    </Style>
</DataGridTemplateColumn.CellStyle>
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding RowValues[0].Value}"/>
    </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
            <TextBox Text="{Binding RowValues[0].Value}"/>
        </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

    ....