使用IValueConverter将ChildCollection绑定到WPF DataGridColumn

时间:2014-02-12 14:20:28

标签: c# wpf wpfdatagrid ivalueconverter

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

我想在我的DataGrid中用小图片表明哪些产品是儿童产品,哪些产品是父母产品。

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

所以我的问题是如何为父产品做同样的事情?我绑定什么?我需要在课堂上添加另一个属性吗?这样做的最佳方式是什么?

我在Product类的所有属性上实现了 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");
        }
    }

    ...
}

1 个答案:

答案 0 :(得分:0)

你可以添加一个转换器来检查副产品数是否大于0.我想说,制作一个单独的属性IsChild和IsParent有点多余,因为它已经从其他属性中清楚了。如果您只将它用于导航图标,则可以将其保留在转换器中。如果您将其用于其他事情,请参考Blam的建议。