これは私の最後の投稿に関連しています。
リストボックスアイテムに上下のボタンを配置して、上下に移動できるようにします。つまり、リスト内のインデックスを変更します。
私が実際にこれをどのように行うかについてのアイデアはありますか?
マルコム
上ボタンであるボタンを作成し、そのOnClickイベントで次のようにします。
int location = listItems.SelectedIndex;
if (location > 0)
{
object rememberMe = listItems.SelectedItem;
listItems.Items.RemoveAt(location);
listItems.Items.Insert(location - 1, rememberMe);
listItems.SelectedIndex = location - 1;
}
現在VisualStudioを開いていないため、これはテストされていないことに注意してください。ただし、良いアイデアが得られるはずです。
上に移動
int index = listbox.SelectedIndex;
if (index != -1)
{
if (index > 0)
{
ListBoxItem lbi = (ListBoxItem)listbox.Items[index];
listbox.Items.RemoveAt(index);
index--;
listbox.Items.Insert(index, lbi);
listbox.SelectedIndex = index;
listbox.ScrollIntoView(lbi);
}
}
下に移動
int index = listbox.SelectedIndex;
if (index != -1)
{
if (index < listbox.Items.Count - 1)
{
listboxlbi = (ListBoxItem)listbox.Items[index];
listbox.Items.RemoveAt(index);
index++;
listbox.Items.Insert(index, lbi);
listbox.SelectedIndex = index;
listbox.ScrollIntoView(lbi);
}
}
モデルにアイテムの順序を含めます(つまり、データクラス)。次に、ListBox をCollectionView
その値でソートされた にバインドします。上/下ボタンは、2 つのデータ項目でこの並べ替えプロパティの値を単純に交換します。
私はあなたがあなたが望むものをリストボックスに投げることができるとかなり確信しています。したがって、ラベルと矢印用の2つのボタンを持つ独自のコントロールを作成できます。次に、それをリストボックスにスローし、イベントを添付します。
バインドする場合:
private void MoveItemUp()
{
if (SelectedGroupField != null)
{
List<string> tempList = AvailableGroupField;
string selectedItem = SelectedGroupField;
int currentIndex = tempList.IndexOf(selectedItem);
if (currentIndex > 0)
{
tempList.Remove(selectedItem);
tempList.Insert(currentIndex - 1, selectedItem);
AvailableGroupField = null;
AvailableGroupField = tempList;
SelectedGroupField = AvailableGroupField.Single(p => p == selectedItem);
}
}
}
private void MoveItemDown()
{
if (SelectedGroupField != null)
{
List<string> tempList = AvailableGroupField;
string selectedItem = SelectedGroupField;
int currentIndex = tempList.IndexOf(selectedItem);
if (currentIndex < (tempList.Count - 1))
{
tempList.Remove(selectedItem);
tempList.Insert(currentIndex + 1, selectedItem);
AvailableGroupField = null;
AvailableGroupField = tempList;
SelectedGroupField = AvailableGroupField.Single(p => p == selectedItem);
}
}
}
コマンドをメソッドにバインドする方法については、すでに理解していると仮定して説明していません。