绑定TimeSpan属性
如果你有一个TimeSpan属性从类中暴露出来,你需要绑定C1DataGrid到对象集合,自动生成不能编辑的TimeSpan列。
使用DataGridDateTimeColumn并不适合这种场景,因为DataGridDateTimeColumn列的类型和TimeSpan有所区别。
以上是一种场景,虽然简单,但也很容易。
最简单的处理问题的方法就是给DataGridDateTimeColumn设置CellEditingTemplate为C1TimeEditor。C1TimeEditor控件就是展示TimeSpan数据的特殊控件。如下的xmal代码定义需求的模板:
<c1:DataGridTemplateColumn Header="Time">
<c1:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding TimeTaken}"/>
</DataTemplate>
</c1:DataGridTemplateColumn.CellTemplate>
<c1:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<c1:C1TimeEditor Format="TimeSpan" Value="{Binding TimeTaken,Mode=TwoWay}"/>
</DataTemplate>
</c1:DataGridTemplateColumn.CellEditingTemplate>
</c1:DataGridTemplateColumn>
一种可以创建自定义列示从DataGridBoundColumn继承,这对于使用AutoGeneratingColumns事件在运行时添加列是非常有用的。
代码参考:
public class DataGridTimeSpanColumn : DataGridBoundColumn
{
public DataGridTimeSpanColumn()
{
Initialize();
}
public DataGridTimeSpanColumn(PropertyInfo property)
: base(property)
{
Initialize();
}
protected void Initialize()
{
IsReadOnly = false;
}
public override object GetCellContentRecyclingKey(C1.Silverlight.DataGrid.DataGridRow row)
{
return "TimeEditor";
}
public override FrameworkElement CreateCellContent(C1.Silverlight.DataGrid.DataGridRow row)
{
var tb = new TextBlock();
return tb;
}
public override void BindCellContent(FrameworkElement cellContent, C1.Silverlight.DataGrid.DataGridRow row)
{
var tb = (TextBlock)cellContent;
var binding = CopyBinding(Binding);
tb.DataContext = row.DataItem;
tb.SetBinding(TextBlock.TextProperty, binding);
}
public override void UnbindCellContent(FrameworkElement cellContent, C1.Silverlight.DataGrid.DataGridRow row)
{
var timeeditor = (TextBlock)cellContent;
timeeditor.DataContext = null;
}
public override FrameworkElement GetCellEditingContent(C1.Silverlight.DataGrid.DataGridRow row)
{
var timeeditor = new C1TimeEditor();
timeeditor.Format = C1TimeEditorFormat.TimeSpan;
var binding = CopyBinding(Binding);
timeeditor.SetBinding(C1TimeEditor.ValueProperty, binding);
return timeeditor;
}
}
请在如下链接下载本文的参考示例:
C1DataGrid的在线英文产品文档地址:
http://helpcentral.componentone.com/nethelp/C1datagridWPF/
如果你对C1DataGrid感兴趣,请到我们的官网下载最新版本:/download/?pid=6
如果你有疑问,可以到GCDN论坛获得技术支持:http://gcdn.grapecity.com.cn/showforum-138.html
《C1DataGrid for WPF使用技巧》系列文章: