【问题标题】:Using Mode=TwoWay and AutogenerateColumns=True in Silverlight 3 DataGrid在 Silverlight 3 DataGrid 中使用 Mode=TwoWay 和 AutogenerateColumns=True
【发布时间】:2010-12-12 19:15:57
【问题描述】:
我的List<BusinessObject> 有一些我想绑定到DataGrid 中的列的公共属性。不幸的是,公共属性的名称并不好,我什至可能直到运行时才知道它们是什么。出于这个原因,我设置 AutoGenerateColumns=True 并拦截每个 DataGridAutoGeneratingColumnEvent,以便我可以检查它是什么,然后取消它、隐藏它或将标题命名为其他名称。
效果很好,但我不知道如何设置 Mode=TwoWay 以便在生成所有列并且有人编辑单元格后触发我的 INotifyPropertyChanged 事件。
奖金问题:
在上下导航网格的行时,网格的数据上下文是否会自动设置为该行的BusinessObject?
【问题讨论】:
标签:
silverlight-3.0
datagrid
binding
autogeneratecolumn
【解决方案1】:
感谢this 的帖子,我了解到绑定发生在 DataGridTextColumn 上。所以在运行时设置Mode的方式是:
1 private void DataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
2 {
3 DataGridTextColumn tc = (DataGridTextColumn)e.Column;
4 tc.Header = "Custom Header";
5 tc.Binding.Mode = BindingMode.TwoWay;
6 }
现在我有了 TwoWay 绑定,我必须弄清楚更改如何使它返回到我的 BusinessObject。
【解决方案2】:
如果绑定正确,您的业务对象将自动接收所需的更新。要以编程方式进行绑定,您可能需要更多代码,例如:
...
Binding binding = new Binding("Propertyname");
tc.binding.Mode = BindingMode.TwoWay;
...