彩票走势图

C1DataGrid for WPF使用技巧之绑定TimeSpan属性

转帖|使用教程|编辑:龚雪|2015-12-25 09:31:48.000|阅读 788 次

概述:如果您有一个TimeSpan属性从类中暴露出来,需要绑定C1DataGrid到对象集合,自动生成不能编辑的TimeSpan列。使用DataGridDateTimeColumn并不适合这种场景,因为DataGridDateTimeColumn列的类型和TimeSpan有所区别。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

如果您有一个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;
}
}

本文的参考示例:

PS: 关于ComponentOne,这些产品你可以关注>>
本文转载自
2015岁末扫尾之战!全球厂商携手放利!优惠详情点击查看>>

标签:WPF用户界面控件ComponentOne

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP