效果
xaml
<dxlc:LayoutItem AddColonToLabel="True" Label="Chapter">
<dxg:LookUpEdit
DisplayMember="Name"
EditValue="{Binding ChapterSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
IsTextEditable="False"
ItemsSource="{Binding Chapters}"
NullText="Set export range."
SeparatorString=";"
ValueMember="ID">
<dxg:LookUpEdit.StyleSettings>
<dxg:MultiSelectLookUpEditStyleSettings />
</dxg:LookUpEdit.StyleSettings>
<dxg:LookUpEdit.PopupContentTemplate>
<ControlTemplate>
<dxg:TreeListControl Name="PART_GridControl" ItemsSource="{Binding Chapters}">
<dxg:TreeListControl.Columns>
<dxg:TreeListColumn
Width="*"
FieldName="Name"
Header="Chapter" />
</dxg:TreeListControl.Columns>
<dxg:TreeListControl.View>
<dxg:TreeListView
AllowBandMoving="False"
AllowColumnMoving="False"
AllowEditing="False"
AllowRecursiveNodeChecking="True"
AllowSorting="False"
AutoExpandAllNodes="True"
CheckBoxFieldName="Checked"
ImmediateUpdateCheckBoxState="True"
KeyFieldName="ID"
NavigationStyle="Row"
ParentFieldName="PID"
ShowCheckboxes="True"
ShowIndicator="False"
ShowNodeImages="False"
VerticalScrollbarVisibility="Auto" />
</dxg:TreeListControl.View>
</dxg:TreeListControl>
</ControlTemplate>
</dxg:LookUpEdit.PopupContentTemplate>
</dxg:LookUpEdit>
</dxlc:LayoutItem>
viewmodel
private ObservableCollection<ArchitectureReportChapter> _chapters;
private List<object> _chapterSelected;
/// <summary>
/// 全部章节选项
/// </summary>
public ObservableCollection<ArchitectureReportChapter> Chapters
{
get => _chapters;
set
{
_chapters = value;
RaisePropertiesChanged(nameof(Chapters));
}
}
/// <summary>
/// 当前选择的章节
/// </summary>
public List<object> ChapterSelected
{
get
{
return this.Chapters.Where(x => x.Checked == true).Select(x => x.ID as object).ToList();
}
set
{
_chapterSelected = value;
RaisePropertiesChanged(nameof(ChapterSelected));
}
}
注意:dxg:LookUpEdit需要通过EditValue保存显示元素的ID,dxg:TreeListControl是直接通过数据CheckBoxFieldName属性设置选中元素; 这里通过绑定EditValue属性的get事件,控制dxg:LookUpEdit显示的选中元素;