我有一個使用2個DevExpress ListBoxControls的用戶可以將項目從一個移動到另一個的Winform應用程序。左側的框具有「所有可用的」部分,而右側的框具有當前分配給用戶的部分。我對泛型非常陌生,但我試圖在這個項目中實現它們。每個ListBoxControl勢必一個ObservableCollection通過它的數據源:如何排序綁定到ListBoxControl的ObservableCollection <T>?
ObservableCollection<Sections> allSections = new ObservableCollection<Sections>((dbContext.Sections
.OrderBy(s => s.SectionName).AsEnumerable<Sections>()));
listboxAllSections.DataSource = allSections;
listboxAllSections.DisplayMember = "SectionName";
listboxAllSections.ValueMember = "SectionID";
所以我有4個按鈕,每個列表框之間,以允許用戶在移動項目來回:
MoveRight的>
MoveAllRight >>
MoveLeft <
MoveAllLeft <<
爲MoveRight
和MoveLeft
我創造了這個通用功能:
private void MoveItem<T>(ListBoxControl source, ListBoxControl target)
{
ObservableCollection<T> sourceItems = (ObservableCollection<T>)source.DataSource;
ObservableCollection<T> targetItems = (ObservableCollection<T>)target.DataSource;
target.BeginUpdate();
//Add items to target.
foreach (T item in source.SelectedItems)
targetItems.Add(item);
//Remove items from source.
for (int x = 0; x < source.SelectedItems.Count; x++)
sourceItems.Remove((T)source.SelectedItems[x]);
target.EndUpdate();
}
所有的偉大工程,但我想補充分揀到它。只有在將項目移動到左側時,我才需要將項目移到右側進行排序。我無法弄清楚如何根據某個屬性對泛型集合進行排序。例如,Sections
有一個名爲SectionName
的屬性,我想分類。如果我使用的實際類型,我可以做到這一點。
ObservableCollection<Sections> sourceItems = (ObservableCollection<Sections>)listboxAllSections.DataSource;
var sortedItems = new ObservableCollection<Sections>();
foreach (var item in sourceItems.OrderBy(t => t.SectionName))
sortedItems.Add(item);
listboxAllSections.DataSource = sortedItems;
但我不知道如何使這個普通到sourceItems.OrderBy(t => t.SectionName)
可以是在通過型式領域
任何幫助/指導表示讚賞!