DataGrid - отображение промежуточного итога от верхней части сетки до текущей строки - PullRequest
1 голос
/ 08 июля 2010

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

Желаемый вывод:

Value      | Running Total
25           25
10           35
-2           33

Спасибо,
Ben

Редактировать: Имейте в виду, что при выполнении сортировки DataGrid, инициируемой пользователем, промежуточные итоги должны быть пересчитаны, поскольку порядок отображения записей изменился.

Мне бы очень хотелось поместить логику для этого в модель представления, а не в код WPF (например, не используя IValueConverter).

Ответы [ 5 ]

0 голосов
/ 15 июля 2010

Я решил эту проблему, расширив DataGrid для предоставления свойства, которое может быть связано с обратным вызовом «курорт произошел» в модели представления.

Детали: http://bengribaudo.com/blog/2010/07/14/3/datagrid-per-row-running-totals

0 голосов
/ 08 июля 2010

Это только идея: на самом деле DataGrid использует интерфейс ICollectionView (http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.aspx) для реализации сортировки (как описано в http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.95).aspx в Группировка, сортировка и фильтрация . *) 1007 *

Итак, вы можете создать класс, который реализует интерфейс ICollectionView, и наблюдать за сортировкой с соответствующим обновлением промежуточного итога.

0 голосов
/ 08 июля 2010

Если вы не возражаете против ответа в VB или C #, тогда этот урок показывает, как делать то, что вы хотите в VB, а этот урок показывает его в C #.Оба используют фиктивный столбец в сетке.

0 голосов
/ 08 июля 2010

Ознакомьтесь с этим ответом о том, как добавить столбец количества строк в ListBox и заполнить его с помощью преобразователя значений. Вместо подсчета предметов, сложите сумму предметов. Если вам нужна общая сумма в вашей виртуальной машине, это, конечно, не хорошее решение.

Нумерованный список

0 голосов
/ 08 июля 2010

Я не знаю, есть ли рекомендуемый / поддерживаемый / простой способ сделать это. Выбор, который я могу придумать:
1) Имейте некоторый элемент пользовательского интерфейса вне сетки данных, чтобы держать общее количество. Это легко привязать к вашей виртуальной машине, но немного сложно решить возникшие проблемы с выравниванием, так как вы, вероятно, хотите получить общее количество прямо под колонкой. Это то, что я бы порекомендовал.
2) иметь фиктивный последний ряд в сетке; это решает проблему с выравниванием, но добавляет хакерскую логику к виртуальной машине, и, вероятно, не очень хорошо смотрится на ней.

НТН,
Berryl

...