在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
}
投标订单是Side属性为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
非常感谢任何帮助 -
答案 0 :(得分: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完成,但这个答案有点复杂)。然后你所要做的就是绑定到这些对象的集合,你就完成了。