关于c#:WPF平台开发-如何将树编辑器添加到数据网格单元中

45次阅读

共计 2196 个字符,预计需要花费 6 分钟才能阅读完成。

点击获取工具 >>

问题

试图将树编辑器嵌入具备多选性能的网格单元中,如何将视图模型 SelectedPerils 绑定到弹出树控件中的已查看我的项目?

解决方案

据理解,目前的指标是应用带有 TreeListView 的弹出式编辑器来编辑汇合属性,本文将为大家解释此操作所须要的步骤。

  1. GridControl 不反对编辑应用 FieldName 绑定的汇合属性,您能够更改属性申明,以便它应用对象类型或应用 Binding 而不是 FieldName。请参阅 Binding Columns to Data Source Fields,让咱们应用第一个选项:

C#

`public object SelectedPerils {get; set;}
//…
SelectedPerils = new List<Peril>();
//…
((List<Peril>)Portfolios[0].SelectedPerils).Add(Portfolios[0].Perils[0]);
((List<Peril>)Portfolios[1].SelectedPerils).Add(Portfolios[1].Perils[1]);
((List<Peril>)Portfolios[2].SelectedPerils).Add(Portfolios[2].Perils[0]);`

XAML

<dxg:GridColumn FieldName="SelectedPerils" />

  1. 咱们倡议应用 LookUpEdit 在弹出窗口中显示 GridControl,应用 MultiSelectLookUpEditStyleSettings 为其启用多选性能,这是执行此操作的预定义方法。因为您心愿将其默认 TableView 替换为 TreeListView,因而须要申明 CellTemplate 和 PopupContentTemplate:

XAML

`<dxg:GridColumn FieldName=”SelectedPerils”>
<dxg:GridColumn.CellTemplate>
<DataTemplate>
<dxg:LookUpEdit
DisplayMember=”Name”
ItemsSource=”{Binding RowData.Row.Perils}”
Name=”PART_Editor”>
<dxg:LookUpEdit.PopupContentTemplate>
<ControlTemplate>
<dxg:GridControl Name=”PART_GridControl” SelectionMode=”MultipleRow”>
<dxg:GridControl.View>
<dxg:TreeListView KeyFieldName=”ID” ParentFieldName=”ParentID” />
</dxg:GridControl.View>
</dxg:GridControl>
</ControlTemplate>
</dxg:LookUpEdit.PopupContentTemplate>
<dxg:LookUpEdit.StyleSettings>
<dxg:MultiSelectLookUpEditStyleSettings />
</dxg:LookUpEdit.StyleSettings>
</dxg:LookUpEdit>
</DataTemplate>
</dxg:GridColumn.CellTemplate>
</dxg:GridColumn>`

  1. 您的编辑器应该可能抉择嵌套值,因而您须要应用自参考数据结构,这就是为什么在模板中应用 KeyFieldName 和 ParentFieldName 属性的起因。否则,您的 LookUpEdit 将回绝其 ItemsSource 之外的值,因为在那里应用 DisplayMember 并关上了查找模式。

C#

`public class Peril {
public int ID {get; set;}
public int ParentID {get; set;} = -1;
//…
}
//…
Perils = new List<Peril>
{
new Peril {Name = “Earthquake”, ID = 0},
new Peril {Name = “EQ”, ID = 10, ParentID = 0},
new Peril {Name = “FF”, ID = 11, ParentID = 0},
new Peril {Name = “Hurricane”, ID = 1},
new Peril {Name = “HU”, ID = 12, ParentID = 1},
new Peril {Name = “TC”, ID = 13, ParentID = 1},
new Peril {Name = “Tornado Hail”, ID = 2},
new Peril {Name = “TH”, ID = 14, ParentID = 2},
new Peril {Name = “WS”, ID = 15, ParentID = 2},
};`

  1. 没有应用 CheckBoxFieldName 属性,然而将 SelectionMode 设置为 MultipleRow,TreeListView 的复选框不会影响其抉择。必须应用自定义实现对其进行同步(例如,请参阅带有 TreeView – Get 选中项的 LookupEdit),TreeListView 的抉择将主动公布到 SelectedPerils 属性。

这是演示后果如以下截图所示:

正文完
 0