C# 需要为Telerik UWP扩展DataGridNumericalColumn
我需要创建一个自定义版本的UWPC# 需要为Telerik UWP扩展DataGridNumericalColumn,c#,telerik,uwp,telerik-grid,C#,Telerik,Uwp,Telerik Grid,我需要创建一个自定义版本的UWPDataGridNumericalColumn,允许自定义RadNumericBox属性(ValueFormat,ButtonsVisibility,SmallChange,LargeChange,Value)以及以美分编辑值的能力(199)编辑时不带小数点,但在不编辑时显示为带小数点的正常美元(1.99)。我尝试了两种不同的方法来扩展现有的控件,但这两种方法似乎都不能完全为我工作 1) 尝试从DataGridNumericalColumn派生-由于无法访问内部成
DataGridNumericalColumn
,允许自定义RadNumericBox
属性(ValueFormat
,ButtonsVisibility
,SmallChange
,LargeChange
,Value
)以及以美分编辑值的能力(199)编辑时不带小数点,但在不编辑时显示为带小数点的正常美元(1.99)。我尝试了两种不同的方法来扩展现有的控件,但这两种方法似乎都不能完全为我工作
1) 尝试从DataGridNumericalColumn
派生-由于无法访问内部成员,因此不可能,即使GitHub提供完整的源代码也是如此
2) 尝试从DataGridTemplateColumn
派生-对于初始显示来说有些可行,但与内联编辑模式与显示模式以及单元格上的验证消息显示相关的所有内容似乎都遥不可及(无法覆盖)我似乎无法使用CellContentTemplateSelector
在内联编辑模式RadNumericBox
显示和正常的TextBlock
显示之间进行选择,因为我似乎无法检测编辑模式何时应用于单元格
这似乎是我实现所需的唯一方法,那就是分叉GitHub代码库,这样我就可以从DataGridNumericalColumn
派生出内部代码
我可以采取什么方法来实现所需的定制
(在撰写本文时,我正在使用Telerik UI For Universal Windows Platform,版本2017.1.301.45。)我最终找到了解决办法,让我克服了使用衍生自
DataGridTemplateColumn
方法扩展此功能的主要困难。以下是我所做的更新和定制——它们主要是在概念层面上描述的,但是其他人应该能够为自己复制这种定制
更新1:
我一直致力于此的更新:
继续使用从DataGridTemplateColumn
派生的方法,我发现通过在网格中创建用于编辑操作的自定义命令,我可以成功地将显示的标记更改为编辑模式与显示模式(CustomBeginEditCommand
、CustomCancelEditCommand
和customcommitteeditcommand
与中的命令非常相似)与应用于网格数据的ViewModel项的接口IItemAwareOfEditMode
,该接口具有一个bool属性IsInEditMode
,我在自定义命令中将其设置为true
或false
,然后在自定义数据模板选择器中使用该属性来决定何时应用y我的编辑标记与我的显示标记。这使用(DataTemplate)XamlReader.LoadWithInitialTemplateValidation(editControlMarkup)
用于将动态创建的标记字符串转换为DataTemplate
s。对于我的实现,我在PropertyChangedCallback
中为自定义列的PropertyNameProperty
依赖项属性创建标记
但是,在验证和显示验证消息以及在用户取消编辑时还原值方面,我仍然存在问题。我实现了网格行项目的ViewModel,以便它们派生自ValidateViewModelBase
,因此它们根据ValidateIO上的文档适当地添加/删除错误n如果我使用DataGridNumericalColumn
(非定制)对于相同的数据,当数据无效时,验证消息确实会指向单元格,但对于我的自定义列,HasErrors
在项上为true,但验证消息不会出现。查看CreateEditorContainer
函数中的验证代码,似乎有一个EditRowHostPanel
和ValidationControl
与编辑器内容一起涉及,但我无法访问实现容器所需的各个部分
如何使验证消息像在DataGridNumericalColumn
中一样显示
此外,如何使取消编辑(在编辑模式下单击该行的蓝色X)实际上将自定义列的值恢复为进入编辑模式之前的值
更新2:
我一直在做的另一个更新是:
继续使用从DataGridTemplateColumn
派生的方法,我成功地通过在编辑模式模板标记中包含ValidationControl
来显示编辑模式的验证消息,该标记引用模板(按名称)中的RadNumericBox
使用ControlPeer
属性,并为其DataItem
属性指定一个值“{Binding}”
,并适当填充其PropertyName
这已经接近我需要的了,但是我的CustomCancelEditCommand
,它使用
Owner.CommandService.ExecuteDefaultCommand(CommandId.CancelEdit, context);
,不会将单元格的显示适当地更新为其以前的值。取消内联行编辑时,它不会正确地调用customcommitteditcommand
;但是,它显示为修改后的值(不会还原为编辑前的值)。即使再次编辑,该值在网格中显示时仍保持为修改后的值
我在Execute
方法中看到,它执行其基本实现,然后执行
Owner.editService.CancelEdit(context.TriggerAction)
,我不理解(RadDataGrid
不包含editService
的定义,我无法从CancelEditCommand
类派生,因为它是内部的)
如何取消编辑(单击b键)