Я новичок в 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
есть идеи, пожалуйста?