WPF - 来自集合的标签文本?

时间:2011-04-16 00:36:33

标签: c# wpf binding

我有一些标签文本,我试图根据ObservableCollection中的值之和生成。基本上,ObservableCollection中的项目都包含Quantity和PricePerItem属性,当我从集合中添加和删除项目时,我想要更新标签。

关于如何开始这个的任何想法?

2 个答案:

答案 0 :(得分:3)

这实际上比你预期的要困难一些。您可以使用IValueConverter,但是当您更改集合中的值时,总和将不会保持最新,因为转换器不会看到单个成员中的更改,只会看到集合本身的更改。

我为表达式代码库编写了一个示例,演示了WPF的Collection Aggregator,它使用Blend SDK Behavior来执行此操作。它允许您显示集合中值的总和,平均值,最小值,最大值等,并使其自动保持最新(假设集合实现IBindingListINotifyCollectionChanged,并且类实现INotifyPropertyChanged)。

这可以通过实际订阅集合已更改事件,以及单个元素属性更改事件以及为您处理聚合来实现。

答案 1 :(得分:0)

创建一个ValueConverter并绑定到该集合。

e.g。基本的和转换器可以是这样的:

public class SumConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var input = value as ObservableCollection<Employee>;
        return (from emp in input
                select emp.Id).Sum();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

如果要提高可重用性,可以使用ConverterParameter传递应该总结的属性名称,然后使用反射进行。

问题是您需要绑定到集合属性,否则集合更改通知将不会更新绑定。