2012-07-10 82 views

回答

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> 

....

相关问题