1

ユーザーが編集を行ったときに、セルの背景色を変更しています。変更が保存された (または元に戻された) ときに、すべてのセルを通常の色に戻したいと思います。

セルの元の背景色 (親行に格納されている) を設定するのは簡単です。しかし、テーブル内のすべてのセルをループしてリセットする方法がわかりません。

Xceedナレッジベースで「グリッドの行を反復処理する方法」という記事を見つけました...これは完璧だと思いますよね? 違う; この記事で言及されている 、 などのプロパティ (またはメソッド) は.DataRows、古い/廃止された Xceed 製品のものです。.FixedHeaderRows

このフォーラム スレッドでは、DataGrid の .Items プロパティを使用することを推奨しています。このプロパティは、私の場合はSystem.Data.DataRowViewのコレクションを返します...しかし、それ (または関連する要素) をXceed.Wpf.DataGrid.DataCell s 背景色を変更する必要があります。

つまり、背景のプロパティをリセットできるように行とセルをループするにはどうすればよいですか?

4

3 に答える 3

4

Xceedフォーラムに投稿したXceedの従業員であるMohamedのおかげで、質問は解決されました。コード例は次のとおりです。

foreach (object item in this.DataGrid1.Items)
{
    Dispatcher.BeginInvoke(new Action<object>(RemoveRowHighlights), DispatcherPriority.ApplicationIdle, item);
}
...
private void RemoveRowHighlights(object item)
{
    Xceed.Wpf.DataGrid.DataRow row = this.DataGrid1.GetContainerFromItem(item) as Xceed.Wpf.DataGrid.DataRow;
    if (row != null) foreach (Xceed.Wpf.DataGrid.DataCell c in row.Cells)
    {
        if (c != null) c.Background = row.Background;
    }
}
于 2010-04-19T17:39:07.717 に答える
1

ビジネス ロジックを変更して、代わりにデータ バインディングを利用することをお勧めします。

データ グリッド内の各セルはオブジェクトになり、それ自体が編集されたかどうかを認識します。そして、そのプロパティにデータをバインドできるため、すべてのオブジェクトを保存してリセットすると、GUI のステータスも更新されます。

また、懸念事項の分離は無料です。GUI は、保存された/保存されていない追跡のビジネス ロジックがどうあるべきかではなく、物事がどのように見えるべきかを決定するようになりました。

于 2010-04-18T03:45:32.813 に答える
0

これを行うには、(UI 仮想化のため) 暗黙的なスタイル トリガーを使用することをお勧めします。Xceed DataGrid のすべてのプロパティは、DataGrid で定義されたテーマによって課されるものを除き、設定可能です。

例:

  <Style TargetType="{x:Type xcdg:DataCell }">
     <Style.Triggers>
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsDirty}"
                     Value="True">
           <Setter Property="Background"
                   Value="DeepSkyBlue" />
        </DataTrigger>
     </Style.Triggers>
  </Style>
于 2016-09-19T15:29:04.147 に答える