我有一个WPF工具包DataGrid,它绑定到视图模型中可观察到的对象集合。在这个DataGrid中,我为该对象的某个字段定义了一个DataGridTemplateColumn。(Car.Name)
我正在尝试检测副本,并在另一个(类似的)对象列表中已经存在的单元格上设置某种样式。
当加载此对话框时,没有选择。视图模型中的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
}
}姓名..。 .<-突出显示 车2 ..。 .<-突出显示
发布于 2013-06-11 17:53:01
你想错了。这不应该是一个迭代方法。IsDuplicate需要是Car的一个属性,并有一个指向集合的链接,以便每个Car对象确定集合中是否有与其匹配的其他项。
public class Car
{
public Guid Id { get; set; }
public Collection<Car> Cars { get; set; }
public bool IsDuplicate
{
get
{
// Logic to check current car against a list of cars
return (Cars.Count(c => c.Id.Equals(this.Id))) > 1;
}
}
}然后在XAML中:
<toolkit:DataGridTemplateColumn.CellStyle>
<Style TargetType="{x:Type toolkit:DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="IsDuplicate" Value="False">
<Setter Property="BorderBrush" Value="Transparent" />
</DataTrigger>
<DataTrigger Binding="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>对于XAML绑定语法不太确定,这是我的头等大事。但你知道这个主意。
发布于 2013-06-11 17:52:16
尝试:
<toolkit:DataGrid ItemsSource="{Binding Cars}"
SelectedItem="{Binding CurrentCar}">https://stackoverflow.com/questions/17050401
复制相似问题