2

telerik グリッドはラムダ構文を使用して、列にバインドするときにビルダー パターンを強化します。

.Columns(cols =>
    {
        cols.Bound(e => e.Tag);
        cols.Bound(e => e.Name);
     });

私のコードで同様の関数を作成したいと思います。Bound() 関数の構文は既にダウンしています。しかし、Columns() 関数の構文はどのようになるでしょうか?

これは私が達成しようとしていることのより良い例です:

class SubList
{
    private List<string> _items;

    public AddItem(string item)
    {
        _items.Add(item);
    }
}

class MyCollections
{
    private Dictionary<string, SubList> _subs = new Dictionary<string,SublList>();

    public SubList AddList(string name)
    {
        var newSub = new SubList();
        _subs[name] = newSub;
        return newSub;
    }
}

class Other
{
    public void DoStuff()
    {
        var collections = new MyCollections();

        //if add item throws error, I don't know which one it is as.
        //it is also hard to put a break point in here.
        collections.AddList("one")
            .AddItem("1")
            .AddItem("un")
            .AddItem("uno");

        //I would like to have something like this:
        collections.AddList("two") { s =>
            s.AddItem("1");
            s.AddItem("un"); //yay! can put breakpoint here
            s.AddItem("uno");
        };

        //or perhaps
        collections.AddList("two").Sub( s => {
            s.AddItem("1");
            s.AddItem("un"); //yay! can put breakpoint here
            s.AddItem("uno");
        });
    }
}
4

1 に答える 1

5

おそらく次の順序で、拡張メソッドまたはインスタンス メソッドのいずれかである可能性があります。

// Assuming some grid type TDataGrid and some column building type TColumnBuilder
public TDataGrid Columns(Action<TColumnBuilder> applyColumns)
{
    // Ask the user what they'd like to do with our columns
    TColumnBuilder placeholder = new TColumnBuilder();
    applyColumns(placeholder);

    // do something with what we've learned
    // this.columns = placeholder.CreateColumns();
}
于 2012-07-10T18:34:03.480 に答える