是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
有什么想法吗?
答案 0 :(得分:-1)
就我个人而言,我已经废除了单用转换器,转而将转换逻辑放在我的ViewModel的属性中。然而,如果期望在几个不同的视图/视图模型中使用转换,那么我将转换逻辑放在专用转换器中。
我想你已经在转换器中设置了断点,以查看它何时被调用,以及它的输出是什么?
如果是这样,我会有兴趣知道它何时被调用并且是输出。否则,这将是我将采取的第一步。
根据我的经验,转换器经常遇到VM Properties没有的问题。