Использование свойства - определенно правильный путь, особенно с точки зрения MVVM. Подумайте Бритва Оккама : в принципе, самое простое решение, как правило, самое лучшее.
Это, безусловно, самое чистое решение и, следовательно, самое удобное в обслуживании. Кроме того, он является наиболее расширяемым (при желании вы можете легко добавлять новые свойства для различных расчетов).
Все, что вам нужно сделать, это создать свойства, доступные только для чтения, и вызвать PropertyChanged с именем этого свойства, когда коллекция изменится (что звучит так, как будто вы делаете).
Например, вот свойство «Среднее»:
public Double Average
{
get { return mMyCollection.Average(); }
}
void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}
Присоединенные свойства не будут работать - они предназначены для указания свойства родителя в дочернем элементе.
ValueConverters будет работать теоретически (хотя они, вероятно, должны присутствовать для каждого элемента в списке, а также для всей коллекции), но вы ничего не конвертируете, вы предоставляете дополнительные данные на основе существующих данных. , Чтобы сделать это, вам нужно было бы возиться со всеми типами шаблонов, и в любое время, когда вам нужно что-то менять, вам придется снова возиться с ними. Это будет сложным в спешке, и без пользы.