0

編集された DataGrid のセルを強調表示するにはどうすればよいですか? トリガーを使用した何らかのスタイルによる XAML ソリューションが推奨されます。しかし、それが不可能な場合は、コード ビハインド アプローチで十分です。

問題を解決できなかったので、コードを投稿していません。

4

1 に答える 1

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>

....

于 2012-10-17T23:23:44.420 に答える