gpt4 book ai didi

c# - WPF DataGrid CurrentItem 为空

转载 作者:行者123 更新时间:2023-12-03 10:29:00 24 4
gpt4 key购买 nike

我有一个 WPF 工具包 DataGrid,它绑定(bind)到 View 模型中的对象的可观察集合。在这个 DataGrid 中,我为该对象的某个字段定义了一个 DataGridTemplateColumn。 (车名)

我正在尝试检测重复项并在已存在于另一个(相似)对象列表中的单元格上设置特定样式。

加载此对话框时,没有任何选择。 View 模型中的 IsDuplicate 确实会为行中的每个项目调用,但我无法判断它当前在 View 模型中的哪个项目。想过用CurrentItem,但是好像总是null。

问题:我如何知道 View 模型中正在调用哪个当前项目?

查看 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
}
}

| Name | ...

| Car 1 | ... <-- Highlight

| Car 2 | ...

| Car 1 | ... <-- Highlight

最佳答案

你的想法是错误的。这不应该是一种迭代方法。 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 绑定(bind)语法,这只是我的想法。但你明白了。

关于c# - WPF DataGrid CurrentItem 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com