2014-02-12 47 views
0

好吧,所以我有一个WPF DataGrid绑定到产品集合。 Product类具有一个名为ParentNumber的属性和两个导航属性Product ParentICollection<Product> SubProducts绑定ChildCollection WPF DataGridColumn与IValueConverter

我想在我的DataGrid中用小图像指示什么产品是儿童,什么产品是父母。

在我的DataGrid中,我有一个包含两个图像的列。如果parentNumber不为null,则第一个图像的可见性属性绑定到parentNumber,并返回System.Windows.Visibility.Visible。这部分很容易。

所以我的问题是我如何能做到父产品相同?我绑定什么?我需要在我的课堂中添加其他属性吗?做这个的最好方式是什么?

我已经在产品类的所有属性上实施了INotifyPropertyChanged

下面是代码:

<DataGridTemplateColumn Header="Productnr" IsReadOnly="True"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Image Height="16" 
         Margin="0,0,5,0" 
         Source="{StaticResource ChildImage}" 
         Visibility="{Binding Path=IsChild, 
               Mode=OneWay, 
               Converter={StaticResource BoolToVisibilityConverter}}" /> 
       <Image Height="16" 
         Margin="0,0,5,0" 
         Source="{StaticResource ParentImage}" 
         Visibility="{Binding ???? /> 
       <TextBlock Text="{Binding Path=ProductNumber}" /> 
      </StackPanel> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

public class Product : INotifyPropertyChanged 
{ 
    public string ProductNumber { get; set; } 

    public string ParentNumber 
    { 
     get 
     { 
      return _parentNumber; 
     } 
     set 
     { 
      _parentNumber = value; 
      OnPropertyChanged("ParentNumber"); 
     } 
    } 

    public virtual Product Parent { get; set; } 

    public virtual ICollection<Product> SubProducts 
    { 
     get 
     { 
      return _subProducts; 
     } 
     set 
     { 
      _subProducts = value; 
      OnPropertyChanged("SubProducts"); 
     } 
    } 

    ... 
} 
+0

是向产品添加一个属性以标识它是否为父母。你的意思是把现有的知名度视为TwoWay?转换器如何知道PartNumber返回的内容?在产品中,我会有两个属性IsParent和IsChild。在我看来,转换器中的IsParent是UI中的业务逻辑。 – Paparazzi

+0

好的,我会测试它,它是有道理的。我只是认为我并不需要为此目的添加属性,因为我已经有父类和childCollection。 – Dux

+0

如果你已经拥有了它,那么它对我来说就不清楚了。尝试另一个转换器。? – Paparazzi

回答

0

可以添加一个检查,如果子产品计数大于0。我要说的是让一个单独的属性IsChild和IsParent是有点多余,因为它是一个转换器已经从其他属性中清除。如果您只将其用于导航图标,则可以将其保存在转换器中。如果你把它用于其他的事情,也可以和Blam的建议一起使用。