我有一个 WPF 工具包 DataGrid,它绑定到视图模型中可观察的对象集合。在这个 DataGrid 中,我为该对象的某个字段定义了一个 DataGridTemplateColumn。(车名)
我正在尝试检测重复项并在已存在于另一个(类似)对象列表中的单元格上设置某种样式。
加载此对话框时,没有选择。视图模型中的 IsDuplicate 确实会为该行的每个项目调用,但我无法判断它当前在视图模型中是哪个项目。我想过使用 CurrentItem,但它似乎总是为空。
问题:我如何在视图模型中知道当前正在调用哪个项目?
查看 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 | ... <-- 突出显示