DevExpress WPF使用技巧教程:使用WPF Data Editors時如何實現(xiàn)多選
下載DevExpress v20.1完整版 DevExpress v20.1漢化資源獲取
通過DevExpress WPF Controls,您能創(chuàng)建有著強大互動功能的XAML基礎應用程序,這些應用程序?qū)W⒂诋敶蛻舻男枨蠛蜆?gòu)建未來新一代支持觸摸的解決方案。
如何啟用多重選擇
默認情況下,ComboBoxEdit、LookUpEdit和ListBoxEdit編輯器使用單個選擇。 要在這些編輯器中啟用多個選擇,您需要更改其操作模式 - 在其StyleSettings屬性中使用相應的設置對象:
<dxe:ComboBoxEdit ...> <dxe:ComboBoxEdit.StyleSettings> <dxe:CheckedComboBoxStyleSettings/> </dxe:ComboBoxEdit.StyleSettings> </dxe:ComboBoxEdit>
我們在以下幫助主題中描述了可用的設置對象:
注意:在In-Place模式下定義這些編輯器時,將使用ComboBoxEditSettings、LookUpEditSettings和ListBoxEditSettings對象,這些對象也具有StyleSettings屬性:
<dxg:GridColumn ...> <dxg:GridColumn.EditSettings> <dxe:ComboBoxEditSettings ...> <dxe:ComboBoxEditSettings.StyleSettings> <dxe:CheckedComboBoxStyleSettings/> </dxe:ComboBoxEditSettings.StyleSettings> </dxe:ComboBoxEditSettings> </dxg:GridColumn.EditSettings> </dxg:GridColumn>
在ListBoxEdit和ListBoxEditSettings中,可以通過將SelectionMode屬性設置為Multiple或Extended來啟用多重選擇(請參閱:SelectionMode Enum)。
綁定數(shù)據(jù)
啟用多個選擇的編輯器在其EditValue屬性中使用List Object數(shù)據(jù)類型的值,在編輯器中選擇項目時,它將使用選定的值創(chuàng)建List Object數(shù)據(jù)類型的新實例,哪些值將存儲在此列表中取決于您是否定義ValueMember屬性。
假設您具有以下Item類,Items集合屬性(在編輯器的ItemsSource屬性中使用)和SelectedItems屬性(在EditValue屬性中使用):
public class Item { public int Id { get; set; } public string Name { get; set; } } ... public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>(Enumerable.Range(0, 10) .Select(c => new Item { Id = c, Name = "Item #" + c })); public List<Object> SelectedValues { get; set; }
如果您不定義ValueMember
<dxe:ListBoxEdit ItemsSource="{Binding Items}"
EditValue="{Binding SelectedValues}"
DisplayMember="Name">
<dxe:ListBoxEdit.StyleSettings>
<dxe:CheckedListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
</dxe:ListBoxEdit>
EditValue和SelectedValues屬性將包含List Object以及從Items中選擇的Item對象。
如果您定義ValueMember
<dxe:ListBoxEdit ItemsSource="{Binding Items}"
EditValue="{Binding SelectedValues}"
ValueMember="Id"
DisplayMember="Name">
<dxe:ListBoxEdit.StyleSettings>
<dxe:CheckedListBoxEditStyleSettings/>
</dxe:ListBoxEdit.StyleSettings>
</dxe:ListBoxEdit>
EditValue和SelectedValues屬性將包含List Object以及從ItemsSource中選擇的Item對象的Id屬性值:
注意:
- 如果在EditValue的List Object實例中添加值或從中刪除值,則編輯器將不會選擇/取消選擇相應的項目。 而是使用所需的一組值創(chuàng)建一個新的List Object實例,并在EditValue中使用它;
- 當您未在ItemSource中定義ValueMember并使用復雜對象*時,EditValue的List Object中的值應來自編輯器的ItemsSource。 在上面的示例中,如果要在代碼中設置SelectedValues,則需要使用Items集合中的Item實例將其設置為List Object:SelectedValues = new List<object>() { Items[0], Items[2], Items[4] };否則,編輯器將無法確定應從源中選擇哪些對象。
在GridControl單元格中的使用
要為某個GridColumn指定in-place編輯器,請使用我們在此幫助主題中描述的方法:In-place Editors,編輯器的EditValue與您在GridColumn中定義的數(shù)據(jù)項屬性相關聯(lián):將列綁定到數(shù)據(jù)源字段。
在編輯器中啟用多選時,它在其EditValue中使用List Object,但是FieldName不支持編輯集合屬性, 這就是為什么您將無法在下面的GridColumn單元格中編輯SelectedValues屬性的原因:
public class GridDataItem { ... public List<Object> SelectedValues { get; set; } ... } <dxg:GridColumn FieldName="SelectedValues" ...> <dxg:GridColumn.EditSettings> <dxe:ComboBoxEditSettings ...> <dxe:ComboBoxEditSettings.StyleSettings> <dxe:CheckedComboBoxStyleSettings/> </dxe:ComboBoxEditSettings.StyleSettings> </dxe:ComboBoxEditSettings> </dxg:GridColumn.EditSettings> </dxg:GridColumn>
在這種情況下啟用編輯使用以下方法:
1. 在GridColumn中使用GridControl的Binding屬性。
您還需要在綁定表達式中將Mode設置為TwoWay,以便在使用Binding屬性時啟用編輯:
<dxg:GridColumn Binding="{Binding Path=SelectedValues, Mode=TwoWay}" ...> <dxg:GridColumn.EditSettings> <dxe:ComboBoxEditSettings ...> <dxe:ComboBoxEditSettings.StyleSettings> <dxe:CheckedComboBoxStyleSettings/> </dxe:ComboBoxEditSettings.StyleSettings> </dxe:ComboBoxEditSettings> </dxg:GridColumn.EditSettings> </dxg:GridColumn>
2. 將基礎數(shù)據(jù)項的屬性類型更改為Object:
public class GridDataItem { ... public Object SelectedValues { get; set; } ... } <dxg:GridColumn FieldName="SelectedValues" ...> <dxg:GridColumn.EditSettings> <dxe:ComboBoxEditSettings ...> <dxe:ComboBoxEditSettings.StyleSettings> <dxe:CheckedComboBoxStyleSettings/> </dxe:ComboBoxEditSettings.StyleSettings> </dxe:ComboBoxEditSettings> </dxg:GridColumn.EditSettings> </dxg:GridColumn>
DevExpress v20.1.4新版發(fā)布,上中文網(wǎng)立即體驗新版~
DevExpress技術交流群2:775869749 歡迎一起進群討論