0

Xaml で、ソースが Order 型のオブジェクトの監視可能なコレクションに設定されている CollectionViewSource があるとします。

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

Bid 注文は、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    

どんな助けでも大歓迎です-

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 に答える