WPF Datagrid分组 - 绑定转换器不动态更新的项目

时间:2011-06-23 10:38:34

标签: wpf mvvm wpfdatagrid

是WPF的新手,并使用数据网格控件对项目进行分组,数据来自Java消息Q,项目在到达时动态添加。

使用GroupStyle显示分组名称,Items Count和读取的自定义转换器显示已执行的数量。

我遇到的问题是,项目计数会在项目到达时更新,但不会调用自定义转换器类。

<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;
    }

在上面的转换器中,当选项卡加载时,当从MQ读取时,有两个项目一个接一个地加载,“orders”计数为1。

例如:我有2行,卖出为1,卖出卖为1 最初在加载时,集合只能看到1行,执行的数量显示-3。

当我切换标签时,订单现在有2个项目,而Exe qty变为正确值-2

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

就我个人而言,我已经废除了单用转换器,转而将转换逻辑放在我的ViewModel的属性中。然而,如果期望在几个不同的视图/视图模型中使用转换,那么我将转换逻辑放在专用转换器中。

我想你已经在转换器中设置了断点,以查看它何时被调用,以及它的输出是什么?

如果是这样,我会有兴趣知道它何时被调用并且是输出。否则,这将是我将采取的第一步。

根据我的经验,转换器经常遇到VM Properties没有的问题。