轉帖|使用教程|編輯:龔雪|2015-12-25 09:31:48.000|閱讀 856 次
概述:如果您有一個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; } }
本文的參考示例:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網