ビュー モデル内のオブジェクトの監視可能なコレクションにバインドされている WPF ツールキット DataGrid があります。この DataGrid では、そのオブジェクトの特定のフィールドに対して DataGridTemplateColumn を定義しました。(車名)
重複を検出し、(類似の) オブジェクトの別のリストに既に存在するセルに特定のスタイルを設定しようとしています。
このダイアログが読み込まれると、選択はありません。ビュー モデルの IsDuplicate は、行の各アイテムに対して呼び出されますが、ビュー モデルで現在どのアイテムにあるのかわかりません。CurrentItem を使おうと思ったのですが、いつも null のようです。
質問: ビュー モデルで、現在どのアイテムが呼び出されているかを知るにはどうすればよいですか?
XAML を表示:
<toolkit:DataGrid ItemsSource="{Binding Cars}"
CurrentItem="{Binding CurrentCar}">
...
<toolkit:DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding
RelativeSource={RelativeSource FindAncestor,
AncestorType=toolkit:DataGrid},
Path=DataContext.IsDuplicate}" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
<DataTrigger Binding="{Binding
RelativeSource={RelativeSource FindAncestor,
AncestorType=toolkit:DataGrid},
Path=DataContext.IsDuplicate}" Value="True">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="3" />
<Setter Property="ToolTip" Value="Duplicate" />
</DataTrigger>
</Style.Triggers>
</Style>
</toolkit:DataGridTemplateColumn.CellStyle>
ViewModel.cs:
public Car CurrentCar { get; set; }
public bool IsDuplicate
{
get
{
// Logic to check current car against a list of cars
var x = CurrentCar; // null
}
}
| | 名前 | ...
| | 1号車 | ... <-- ハイライト
| | 2号車 | ...
| | 1号車 | ... <-- ハイライト