0

在 Xaml 中,假设我有一个 CollectionViewSource,它的源设置为 Order 类型的对象的可观察集合:

public class Order
{
    public int ContractID
    {
        get;
        set;
    }
    public double? Price
    {
        get;
        set;
    }
    public OrderSide Side
    {
        get;
        set;
    }
}
public enum OrderSide
{
    BID,
    ASK
}

投标订单是一个侧属性为 BID,ask 为 ASK 的订单。问题是我需要以当前格式显示订单

Grouped by ContractID
    Bids (Descending)      Asks (Ascending)

更具体地说,问题是我需要并排显示出价和要价。

因此,例如使用以下集合,

var orders = new List<Order>()
        {
            new Order(){ContractID=1,Price=10,Side=OrderSide.BID},
            new Order(){ContractID=1,Price=11,Side=OrderSide.ASK},
            new Order(){ContractID=1,Price=9,Side=OrderSide.BID},
            new Order(){ContractID=1,Price=11.5,Side=OrderSide.ASK},
            new Order(){ContractID=2,Price=20,Side=OrderSide.BID},
            new Order(){ContractID=2,Price=24,Side=OrderSide.ASK},
            new Order(){ContractID=2,Price=21,Side=OrderSide.BID}
        };

它会呈现为

1
 10    11
 9     11.5

2
 21    24
 20    

我猜我需要结合使用过滤的 CollectionViewSource 和 datatemplateselectors ..?

作为额外的奖励,我希望能够在分组行上显示最佳出价和最佳要价。因此,使用相同的数据,它会呈现为

1 10    11
  10    11
  9     11.5

2 21    24
  21    24
  20    

非常感谢任何帮助 -

4

1 回答 1

0

快速而肮脏——将您的订单包装在一个表达您的分组逻辑的类中

public class OrdersByContractId
{
  public int ContractId {get;set;}
  // set best bid and ask when this is updated
  public ObservableCollection<Order> Orders {get;set;}
  public Order BestBid {get;set;}
  public Order BestAsk {get;set;}
}

然后您可以查询您的存储库、生成和分组您的订单、确定最佳出价和要价并填写您的 OrdersByContractIds(这可以使用 Linq to Sql 完成,但对于这个答案来说有点复杂)。然后你所要做的就是绑定到这些对象的集合,你就完成了。

于 2009-07-07T13:50:58.930 回答