Представьте, что у меня есть следующий класс, который реализует INotifyPropertyChanged
.(Для краткости я не показываю код, который вызывает события PropertyChanged
, но представьте, что это делает каждое свойство.)
public class Employee : INotifyPropertyChanged
{
public string Title { get; set; }
public string Department { get; set; }
public double Salary { get; set; }
}
Теперь, скажем, у меня четыре сотрудника:
Title Department Salary
-----------------------------------
(1) Professor Math 90,000
(2) Professor CompSci 120,000
(3) Instructor Math 50,000
(4) Instructor CompSci 60,000
Я хотел бы создать таблицу с использованием WPF, как показано ниже:
Title Math CompSci Total
------------------------------------------
Professor 90,000 120,000 210,000
Instructor 50,000 60,000 110,000
Она перераспределяет сотрудников по названию, показывая их зарплаты для каждого отдела в отдельных столбцах.В последнем столбце показана общая зарплата на заголовок.
Кроме того, я бы хотел, чтобы пользователь мог взаимодействовать с таблицей, например, добавлять или удалять сотрудника или изменять чью-либо зарплату (ипоэтому автоматически обновляю итоговое значение).
Я смог сделать это, воссоздавая всю таблицу каждый раз, когда происходит изменение.Но я хотел бы иметь возможность делать это более эффективно (например, обновлять итоговые данные только при изменении зарплаты).
Я пытался это сделать, но код очень быстро запутывается.Моя модель представления должна прослушивать изменения коллекции в Employees, и всякий раз, когда кто-то добавляется, она должна прослушивать свою зарплату, чтобы обновить Итог.Трудно следить за тем, что происходит, и я думаю, что позже это будет кошмар обслуживания.
Мне бы хотелось, чтобы был способ связать общее количество и автоматически отслеживать все необходимые изменения.Вот некоторый выдуманный код, чтобы показать, что я имею в виду:
<TextBlock Text="{Binding Employees, Aggregate=Sum, Property=Salary}" />
Я знаю, что этого не существует, но есть ли какой-нибудь простой способ реализовать то, что я пытаюсь сделать, который понятен и понятен?Это не должно быть в XAML.Я в порядке с программным решением, пока ясно, что происходит.