WPFのXecedDatagridのすべてのセルをループしますか?
-
22-09-2019 - |
質問
ユーザーが編集したときに、セルの背景色を変更しています。変更が保存された(または戻る)場合、すべてのセルを通常の色に戻したいと思います。
セルの元の背景色(親の列に保存されているように)を設定するのは簡単です。しかし、テーブル内のすべてのセルをループする方法を理解することはできません。
XCehterのナレッジベースで「」という記事を見つけました。グリッドの行を繰り返す方法「...あなたが完璧だと思うだろう、そうだね?間違っている;プロパティ(または方法)のような .DataRows
, .FixedHeaderRows
, 、記事に記載されているなどはからです 古い/削除されたXCEHTER製品.
このフォーラムスレッド 私の場合は、Datagridの.itemsプロパティを使用することをお勧めします。 System.Data.DatarowViewS ...しかし、私はそれ(またはその関連要素のいずれか)をキャストする方法を見つけることができません Xeced.wpf.datagrid.datacells背景色を変更する必要があります。
要するに、バックグラウンドプロパティをリセットできるように、行とセルをループするにはどうすればよいですか?
解決
質問は解決されました XCehterフォーラムに投稿したXCUCED従業員の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;
}
}
他のヒント
代わりにデータバインディングを利用するためにビジネスロジックを変更することを提案します。
データグリッド内の各セルはオブジェクトになり、それ自体が編集されているかどうかはわかります。そして、そのプロパティにデータバインドすることができます。したがって、すべてのオブジェクトを保存およびリセットすると、GUIでステータスも更新されます。
また、懸念を無料で分離します。あなたは今、物事がどのように見えるべきかを決定します。節約/保存されていない追跡のビジネスロジックは何であるかではありません。
これを行うための推奨される方法は、(UI仮想化のため)暗黙的なスタイルのトリガーを使用することであり、XCehted 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>