查看/编辑网格中的动态参数
本文关键字:动态 参数 网格 编辑 查看 | 更新日期: 2023-09-27 18:08:40
我正在评估在c#/WPF/MVVM应用程序中查看和编辑参数的可能性。我目前正在寻找一些自定义控件从WPF Woolkit Extended, Telerik, DevExpress和Syncfusion。我看到两个选项,一个PropertyGrid或一个类似datagrid的控件。
问题:我的参数内容是在一个集合和PropertyGrids似乎不喜欢这些,他们喜欢被绑定到具有属性的对象。另一方面,我的参数有不同的值类型,这是数据网格不喜欢的东西,列总是有相同的值编辑器(例如复选框,日期选择器等)。
有没有人知道一个可靠的控件,支持绑定到一个集合和单独的值编辑器每行?
其他需求是分层数据表示、验证和搜索功能。
DataGrid
允许您使用DataGridTemplateColumn
,您可以在其中指定将应用于该列中的每个单元格的模板。这个模板可以包含您已经定义的UserControl
,它分析它的DataContext
并显示适当的控制。(这将是相当多的工作,但是,如果有现成的解决方案,您应该使用它来代替。)
经过一段时间的调查,我发现所有的框架都有能力在列中应用单独的单元格编辑器。
这通常在列定义中完成。网格有一个Columns集合。每个列可以设置一个CellTemplateSelector,这是我最初问题的关键。
以下是Telerik网格视图的一小段代码,但到CellTemplateSelector,它们的行为都是一样的,据我所知。所有第三方UI库的供应商似乎都复制了WPF DataGrid的行为。
<telerik:RadGridView x:Name="radGridView"
AutoGenerateColumns="False">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding Name}" Header="Parameter" />
<telerik:GridViewDataColumn DataMemberBinding="{Binding Value}" Header="Value">
<telerik:GridViewDataColumn.CellTemplateSelector>
<telerik:ConditionalDataTemplateSelector>
<telerik:DataTemplateRule Condition="PropertyId < 1">
<DataTemplate>
<TextBox Text="{Binding Value, StringFormat=c}"/>
</DataTemplate>
</telerik:DataTemplateRule>
<telerik:DataTemplateRule Condition="PropertyId > 0">
<DataTemplate>
<CheckBox IsChecked="{Binding Value}" />
</DataTemplate>
</telerik:DataTemplateRule>
</telerik:ConditionalDataTemplateSelector>
</telerik:GridViewDataColumn.CellTemplateSelector>
</telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
在这个例子中,网格的ItmesSource被绑定到包含Name、Value和PropertyId属性的视图模型。根据PropertyId选择控件。我喜欢Telerik控件的一点是,我不需要隐藏代码,因为ConditionalDataTemplateSelector在该框架中可用。我想MVVM最好保持你的视图干净的代码,
更新:
刚刚收到了来自Syncfusion的答案,他们说:
我们可以在一个列中加载不同的单元格编辑器。为此,我们必须处理dataGrid.Model.QueryCellInfo甚至我们必须根据数据改变CellType。我们无法避免代码滞后。但是这可以通过使用behavior来实现。