首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGrid CurrentItem为空。

WPF DataGrid CurrentItem为空。
EN

Stack Overflow用户
提问于 2013-06-11 17:42:49
回答 2查看 1.9K关注 0票数 3

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

我正在尝试检测副本,并在另一个(类似的)对象列表中已经存在的单元格上设置某种样式。

当加载此对话框时,没有选择。视图模型中的IsDuplicate确实会对行的每一项进行调用,但我无法判断它当前在视图模型中的哪个项。我想使用CurrentItem,但它似乎总是空的。

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

视图XAML:

代码语言:javascript
复制
    <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:

代码语言:javascript
复制
public Car CurrentCar { get; set; }

public bool IsDuplicate
{
  get
  {
    // Logic to check current car against a list of cars
    var x = CurrentCar; // null
   }
}

姓名..。 .<-突出显示 车2 ..。 .<-突出显示

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-11 17:53:01

你想错了。这不应该是一个迭代方法。IsDuplicate需要是Car的一个属性,并有一个指向集合的链接,以便每个Car对象确定集合中是否有与其匹配的其他项。

代码语言:javascript
复制
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中:

代码语言:javascript
复制
<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绑定语法不太确定,这是我的头等大事。但你知道这个主意。

票数 1
EN

Stack Overflow用户

发布于 2013-06-11 17:52:16

尝试:

代码语言:javascript
复制
<toolkit:DataGrid ItemsSource="{Binding Cars}"
                  SelectedItem="{Binding CurrentCar}">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17050401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档