WPF Datagrid Grouping - элементы с конвертером привязок не обновляются динамически - PullRequest
0 голосов
/ 23 июня 2011

Я новичок в WPF и использую элемент управления сеткой данных для группировки элементов, данные поступают из Java-сообщения Q и элементы добавляются динамически по мере их поступления.

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

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

<DataGrid.GroupStyle>
    ...
 <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}, Count: {1:#0}, Executed Qty: {2}">
            <Binding Path="Name" />
            <Binding Path="ItemCount" />
            <Binding Path="Items" Converter="{StaticResource convertToExecutedQty}" />
        </MultiBinding>
</TextBlock.Text>
.....
</DataGrid.GroupStyle>

А в классе Converter:

public class ConvertToExecutedQty : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && value is IEnumerable<Object>)
        {
            IEnumerable<TickOrderViewModel> orders = ((IEnumerable<object>) value).GetBaseElements<TickOrderViewModel>();


            if (orders.Count() > 0)
            {
                var BuyQty = ( from n
                              in orders
                               where n.side.ToUpperInvariant() == "BUY"
                               select n.executed_qty ).Sum();

                var SellQty = ( from n
                              in orders
                               where n.side.ToUpperInvariant() == "SELL"
                               select n.executed_qty ).Sum();

                return BuyQty - SellQty;
            }
        }

        return null;
    }

В вышеупомянутом конвертере, когда загружается вкладка, счетчик «заказов» равен 1, когда есть 2 элемента, которые были загружены один за другим, как они были прочитаны из MQ.

Пример: у меня есть 2 строки с SELL как 1 и SELL как BUY как 1 Первоначально при загрузке коллекция видит только 1 строку, и выполненный кол-во отображает -3.

Когда я переключаюсьвкладки, то заказы теперь имеют 2 элемента, и кол-во Exe становится правильным значением -2

есть идеи, пожалуйста?

1 Ответ

0 голосов
/ 23 июня 2011

Лично я покончил с одноразовыми конверторами в пользу размещения логики преобразования в свойствах моей ViewModel.Однако если ожидается, что преобразование будет использоваться в нескольких различных представлениях / моделях представления, я помещаю логику преобразования в выделенный преобразователь.

Я предполагаю, что вы установили точку останова в преобразователе, чтобы увидеть, когда он вызывается,и что это вывод?

Если так, мне было бы интересно узнать, когда он вызывается и выводится.В противном случае это был бы первый шаг, который я предпринял бы.

По моему опыту, конвертеры часто сталкиваются с проблемами, которых нет у свойств VM.

...