C# WPF 控制listbox的item順序

  • 2763
  • 0

摘要: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之類的,不保證這個方法也有用囉~
(真是不負責任呀)