我有一个 ObservableCollection,我需要绑定到 2 个标签,首先显示集合中的项目数,然后显示值的总和。
第一个标签绑定到集合计数属性,第二个标签直接绑定到 ObservableCollection,使用转换器计算所有项目的总数
XAML 看起来像这样
<Grid>
<ListBox Name="itemList" ItemsSource="{Binding DataList}"/>
<Label Name="lblcount" Content="{Binding DataList.Count}" />
<Label Name="lblTotal" Content="{Binding DataList, Converter={StaticResource calculateTotalConvertor}" />
</Grid>
我的虚拟机有一个这样的集合
ObservableCollection<int> data = new ObservableCollection<int>();
public ObservableCollection<int> DataList
{
get { return data; }
set { data = value; }
}
我的转换器代码是
public class CalculateTotalConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ObservableCollection<int> collection = value as ObservableCollection<int>;
return collection.Sum();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
问题是在 DataList、ListView 中添加新项目,并且显示项目计数的标签会更新,但“lblTotal”不会随总数更新。
基本上如何强制您的绑定在 ObservableCollection 更改时进行评估?它如何直接用于 ListView 或 DataGrid 但不适用于 label ?
我知道这个问题可以通过在 VM 中创建一个属性来解决,以在集合更新时显示总数并引发属性更改,但是还有比这更好的解决方案吗?
当然,这是我实际问题的简化形式,我无法访问 ViewModel 和集合,它是第三方控件。我正在创建一个包装用户控件,并与视图与其内部集合进行相对绑定。