1

我正在评估在 C#/WPF/MVVM 应用程序中查看和编辑参数的可能性。我目前正在研究WPF Woolkit ExtendedTelerikDevExpressSyncfusion的一些自定义控件。我看到两个选项,PropertyGrid 或类似 DataGrid 的控件。

问题:我的参数内容在一个集合中,而 PropertyGrids 似乎不喜欢那些,他们喜欢绑定到具有属性的对象。另一方面,我的参数有不同的值类型,这是数据网格不喜欢的,列总是有相同的值编辑器(例如复选框、日期选择器等)。

有人知道支持绑定到集合和每行单个值编辑器的可靠控件吗?

其他要求是分层数据表示、验证和搜索功能。

4

2 回答 2

1

经过一段时间的调查,我发现所有框架都能够在列中应用单个单元格编辑器。

这通常在列定义中完成。网格有一个Columns集合。每列都可以设置一个CellTemplateSelector,这是我最初问题的关键。

这是 Telerik 网格视图的一个小片段,但就我所知,它们的行为都相同,直到 CellTemplateSelector。当然,所有 3rd 方 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 &lt; 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 绑定到包含NameValuePropertyId属性的我的视图模型。根据PropertyId选择一个控件。我喜欢 Telerik 控件的一点是我不需要代码隐藏,因为ConditionalDataTemplateSelector在该框架中可用。我猜,MVVM 可以更好地保持您的视图没有代码。

更新:

刚刚收到Syncfusion的答复,他们说:

我们可以在一列中加载不同的单元格编辑器。为此,我们甚至必须处理 dataGrid.Model.QueryCellInfo 并且我们必须根据数据更改 CellType。我们无法避免代码落后。但这可以使用行为来实现。

于 2013-04-18T11:04:29.293 回答
1

DataGrid允许您使用DataGridTemplateColumn,您可以在其中指定将应用于该列中每个单元格的模板。此模板可能包含UserControl您定义的一个,它分析它DataContext并显示适当的控件。(不过,这将是一项相当多的工作,因此如果存在开箱即用的解决方案,您应该改用它。)

于 2013-04-11T09:06:08.513 回答