2014-02-12 5 views
0

Итак, у меня есть DataGrid WPF для коллекции продуктов. Класс Product имеет свойство ParentNumber и два навигационных свойства: Product Parent и ICollection<Product> SubProducts.Связывание ChildCollection с WPF DataGridColumn с IValueConverter

Я хочу указать в своем DataGrid с небольшим изображением, какие продукты являются детьми и какие продукты являются родителями.

В моей DataGrid У меня есть столбец с двумя изображениями. Первое изображение имеет свойство видимости, связанное с parentNumber с конвертером, который возвращает System.Windows.Visibility.Visible, если parentNumber не равен NULL. Эта часть была легкой.

Итак, мой вопрос в том, как я могу сделать то же самое для родительского продукта? К чему я привязан? Нужно ли добавлять другое свойство в мой класс? Каков наилучший способ сделать это?

Я внедрил INotifyPropertyChanged на все свойства класса Product.

Вот код:

<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 в конвертере - это бизнес-логика в пользовательском интерфейсе. – Paparazzi

+0

Хорошо, я проверю это, и это имеет смысл. Я просто подумал, что мне не нужно добавлять свойства к классу для этой цели только с тех пор, как у меня уже есть родительский элемент и childCollection. – Dux

+0

Если у вас уже есть это, то мне это непонятно. Попробуйте другой конвертер. – Paparazzi

ответ

0

Вы можете добавить конвертер, который проверяет, если число подпра больше 0. Я хотел бы сказать, что создание отдельной IsChild собственности и IsParent немного излишнее, поскольку это уже ясно из других свойств. Если вы используете его только для навигационных значков, нормально держать его в конвертере. Если вы используете его для других вещей, пойдите с предложением Блама.

Смежные вопросы