摘要:C# WPF 控制listbox的item順序
真高興我終於搞定它了!
原理也是看英討得到的,但是理論和實作還是有差的Orz
一樣有一個listBox還有代表往上移和往下移的Button,
思路就是:
插入一個複製品到指定位置,再把原來的刪掉。
要記得,插入後的位置會把後面的往後移(因為是插入,所以插入在2,原本在2的東西就會變成3......)
往上移的按鈕這樣操作:
if (listBox.SelectedItem != null && listBox.SelectedIndex != 0)
{
//=============================順序往上(第一筆不動)===========================//
// add a duplicate item up in the listbox
// Duplicate selected
int ch = listBox.SelectedIndex;
listBox.Items.Insert(ch - 1, listBox.Items[ch]);
// delete the old item
listBox.Items.RemoveAt(ch + 1);
}
如果以上你可以接受,
那麼往下移就是:
if (listBox.SelectedItem != null && listBox.SelectedIndex != listBox.Items.Count - 1)
{
//===========================順序往下(最後一筆不動)===========================//
int ch = listBox.SelectedIndex;
listBox.Items.Insert(ch + 2, listBox.Items[ch]);
listBox.Items.RemoveAt(ch);
}
為什麼這邊是單位2呢?就像剛剛提到的,插入是會把其他人往下移,如果只插入在下一個,那麼原本的會放在後面。所以反過來想讓他移動2個單位。
真是可喜可賀呀~
能夠在一天之內解決這問題~(灑花)
其實我看英討還有另一種方法,是用Binding的方式。
就是在XAML動手腳啦!
雖然在XAML動手腳的話,程式碼會比較少,
但SV實在看不懂也太會,所以就用現在這個方法了。
順帶一題,SV的listBox是動態加入資料的,也就是初始為空的listBox。如果是用了Binding之類的,不保證這個方法也有用囉~
(真是不負責任呀)