DataGrid コントロールを含み、C# WPF DataGrid で次のシナリオを有効にする WPF ウィンドウを作成したいと思います。それ以外の場合は赤。この動作をプログラムする最もクリーンな方法は何ですか? この種の検証を行うために、DataGrid と WPF に組み込み機能はありますか?
編集:今のところ、RowStyle を使用してこれを実行することができましたが、各行の検証に時間がかかるため、アプリケーションが応答しなくなるため、これを非同期で並列にしたいと考えています。
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding BgColor}">
</Setter>
</Style>
</DataGrid.RowStyle>
EDIT2:ここに進行状況があります:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=BgColor}" Value="DarkRed">
<Setter Property="Background" Value="DarkRed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
コードビハインドは次のようになります。
Func<List<bool>> func = () => data.AsParallel().Select(x => File.Exists(x.FullPath)).ToList();
List<bool> res = null;
IAsyncResult ar = func.BeginInvoke(new AsyncCallback(x=>
{
res = ((Func<List<bool>>)((AsyncResult)x).AsyncDelegate).EndInvoke(x);
for (int i = 0; i < res.Count; ++i)
if (!res[i])
data[i].BgColor = Brushes.DarkRed;
}), null);
残っている問題は、行が再描画されたときにのみ行の背景色が更新されることです (ビューの外に移動し、再びビューに移動します)。これを修正するクリーンで簡単な方法はありますか?
EDIT3: 最後に、すべてが必要に応じて正確に機能します。EDIT2 に欠けているのは、データ ソース クラスに INotifyPropertyChanged を実装することだけでした。