Можно ли использовать IMultiValueConverter для списка элементов? - PullRequest
0 голосов
/ 29 сентября 2010

У меня EmployeeList как observableCollection объекта Employee.

Объект Employee имеет зарплату.

Я хочу отобразить несколько значений, таких как средняя зарплата сотрудников в XAML, и поле пользовательского интерфейса должно автоматически обновляться при добавлении элемента в список или при изменении поля зарплаты в любом из обновленных элементов.

Этого можно добиться, создав свойство для усреднения и прослушав обработчики коллекций Changed и ProperyChanged в списке.

Но я уверен, что должен быть какой-то другой лучший способ сделать это. (Например, используя AttachedProperties или IValueConverter / IMultiValueConverter)

По этому поводу у меня есть следующие вопросы.

  1. Можно ли использовать IMultiValueConverter для List / ObservableCollection элементов? Конвертер должен вызываться при добавлении элемента в список, а также при изменении определенного свойства?

1 Ответ

1 голос
/ 29 сентября 2010

Использование свойства - определенно правильный путь, особенно с точки зрения MVVM. Подумайте Бритва Оккама : в принципе, самое простое решение, как правило, самое лучшее.

Это, безусловно, самое чистое решение и, следовательно, самое удобное в обслуживании. Кроме того, он является наиболее расширяемым (при желании вы можете легко добавлять новые свойства для различных расчетов).

Все, что вам нужно сделать, это создать свойства, доступные только для чтения, и вызвать PropertyChanged с именем этого свойства, когда коллекция изменится (что звучит так, как будто вы делаете).

Например, вот свойство «Среднее»:

public Double Average   
{
    get { return mMyCollection.Average(); }
}

void mMyCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    PropertyChanged(this, new PropertyChangedEventArgs("Average"));
}

Присоединенные свойства не будут работать - они предназначены для указания свойства родителя в дочернем элементе.

ValueConverters будет работать теоретически (хотя они, вероятно, должны присутствовать для каждого элемента в списке, а также для всей коллекции), но вы ничего не конвертируете, вы предоставляете дополнительные данные на основе существующих данных. , Чтобы сделать это, вам нужно было бы возиться со всеми типами шаблонов, и в любое время, когда вам нужно что-то менять, вам придется снова возиться с ними. Это будет сложным в спешке, и без пользы.

...