2012-07-10 64 views
2

telerik网格在绑定到列时使用lambda语法来增强构建器模式。将lambda用于构建器模式

.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"); 
     }); 
    } 
} 

回答

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(); 
} 
+0

嗯,这可能是,让我测试。 – sheamus 2012-07-10 18:53:53

+0

所以在我上面的例子中,我需要在SubList中实现类似于Columns方法的'Sub()'方法? – sheamus 2012-07-10 18:58:08

+0

这是正确的。 – user7116 2012-07-10 19:21:14