1

クラスを単体テストしようとしていますが、そのクラスはXamDataGridを使用しています。

私の問題は、コードがXamDataGrid からSortedまたはSortingイベントをトリガーする必要があることですが、そうではありません。

ここでグリッドを作成する方法:

public static class XamDataGridObjectMother
{
    public static XamDataGrid CreateGrid(params string[] columns)
    {
        var grid = new XamDataGrid();

        var layout = new FieldLayout();
        grid.FieldLayouts.Add(layout);

        int i = 0;
        foreach (var column in columns)
        {
            var field = new Field(column, typeof(string), column+" Label");
            field.Column = i;
            field.Width = new FieldLength(100);
            field.Name = column;
            layout.Fields.Add(field);
            i++;
        }

        var data = new List<XamDataGridFakeItem>();
        data.Add(new XamDataGridFakeItem("P1", "A1"));
        data.Add(new XamDataGridFakeItem("P2", "A1"));
        data.Add(new XamDataGridFakeItem("P3", "A1"));
        data.Add(new XamDataGridFakeItem("P4", "A2"));
        data.Add(new XamDataGridFakeItem("P5", "A2"));
        data.Add(new XamDataGridFakeItem("P6", "A2"));

        foreach (var xamDataGridFakeItem in data)
        {
            grid.DataItems.Add(xamDataGridFakeItem);
        }

        return grid;
    }

    public class XamDataGridFakeItem
    {
        public XamDataGridFakeItem(string portfolio, string area)
        {
            Portfolio = portfolio;
            Area = area;
        }

        public string Portfolio { get; set; }

        public string Area { get; set; }
    }
}

そして、これは私の単体テストの一部で、プログラムでグリッドに並べ替えを追加し、並べ替え/並べ替えイベント (おそらく両方) を発生させる必要があります。

 var sortDescription = new FieldSortDescription("Portfolio", ListSortDirection.Descending, false);

 _dataGrid.FieldLayouts[0].SortedFields.Add(sortDescription); // That should trigger the event(s)!

もちろん、_dataGrid は、上記のオブジェクト マザー クラスを使用して別の場所で初期化されます。

したがって、まだ明らかでない場合の私の問題は、並べ替えられたフィールドを追加すると、並べ替え/並べ替えイベントをトリガーする必要がある (グリッドを並べ替える必要がある) ことですが、そうではなく、(プログラムで) 強制する方法が見つかりません。グリッドをソートし、それらのイベントを発生させます。

私は何が欠けていますか?

4

1 に答える 1

1

SortingおよびSortedイベントは、ユーザーの操作に応答してのみ発生するため、コードでグリッドを並べ替える場合は発生しないことが予想されます。

どのフィールドがグリッドでソートされているかを確認する必要がある場合は、関連するFieldLayout.SortedFieldsコレクションをチェックして、どのフィールドがソートされているかを確認します。

テストで並べ替えが成功したことを確認する場合は、イベントが発生するかどうかを確認するよりも、グリッド内のレコードの順序を確認する方がよい場合があることに注意してください。

于 2013-02-14T14:30:32.823 に答える