Introduction
In this article I have taken one list box and bound it with a list item. Then added two buttons in the form to rearrange the list box items up and down.
The XAML code is given below.
<Window x:Class="MVVM_Application.Views.Preference.Preference1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Preference" Height="673" Width="662" WindowStartupLocation="CenterScreen" WindowStyle="None" ResizeMode="NoResize" BorderBrush="Black" OpacityMask="Black" Background="Black"
xmlns:w="clr-namespace:MVVM_Application.Views.Preference" Initialized="Window_Initialized">
<Grid>
<ListBox Canvas.Left="76" Canvas.Top="62" Height="323" Name="lbxSportList" Width="212" ItemsSource="{Binding Path=Selections}" DisplayMemberPath="SelectionName"/>
<Button Canvas.Left="294" Canvas.Top="175" Height="34" Name="btnUp" Width="49" Click="btnUp_Click">
<Image Height="34" Name="image1" Stretch="Fill" Width="49" Source="/MVVM%20Application;component/Views/Images/arrow-31-512.png"/>
</Button>
<Button Height="34" Name="btnDown" Width="49" Canvas.Left="294" Canvas.Top="215" Click="btnDown_Click">
<Image Height="34" Name="image2" Stretch="Fill" Width="49" Source="/MVVM%20Application;component/Views/Images/arrow-31-512qwq.png" OpacityMask="Black" />
</Button>
</Grid>
To move the list box items up, I have wiriten the following code in the click event of button control in the code behind.
Code behind Code
private void btnUp_Click(object sender, RoutedEventArgs e)
{
  if (this.lbxSportList.SelectedItems.Count <= 0)
    return;
  if (this.lbxSportList.SelectedIndex > 0)
  {
    List<MVVM_Application.Entity.Model.Preference.EventType> EventTypes = (List<MVVM_Application.Entity.Model.Preference.EventType>)this.lbxSportList.ItemsSource;
    //Getting Item from Itemsource of listbox
    MVVM_Application.Entity.Model.Preference.EventType ETU = Â
      (MVVM_Application.Entity.Model.Preference.EventType)this.lbxSportList.Items[this.lbxSportList.SelectedIndex - 1];
    MVVM_Application.Entity.Model.Preference.EventType ETD =
      (MVVM_Application.Entity.Model.Preference.EventType)this.lbxSportList.Items[this.lbxSportList.SelectedIndex];
    //Removing items from item source
    EventTypes.Remove(ETU);
    EventTypes.Remove(ETD);
    //Adding items from item source
    ETU.Priority = ETU.Priority + 1;
    ETD.Priority = ETD.Priority - 1;
    EventTypes.Add(ETU);
    EventTypes.Add(ETD);
    //Shorting ListBox Items
    lbxSportList.Items.SortDescriptions.Add(new System.ComponentModel.SortDescription("Priority",
       System.ComponentModel.ListSortDirection.Ascending));
  }
}
To move the list box items down, I have wiriten the following code in the click event of the button control in the code behind.
Code behind Code
private void btnDown_Click(object sender, RoutedEventArgs e)
{
  if (this.lbxSportList.SelectedItems.Count <= 0)
    return;
  if (this.lbxSportList.SelectedIndex >= 0 && this.lbxSportList.SelectedIndex<this.lbxSportList.Items.Count-1)
  {
    List<MVVM_Application.Entity.Model.Preference.EventType> EventTypes =
       (List<MVVM_Application.Entity.Model.Preference.EventType>)this.lbxSportList.ItemsSource;
    //Getting Item from Itemsource of listbox
    MVVM_Application.Entity.Model.Preference.EventType ETU =
       (MVVM_Application.Entity.Model.Preference.EventType)this.lbxSportList.Items[this.lbxSportList.SelectedIndex];
    MVVM_Application.Entity.Model.Preference.EventType ETD =
      (MVVM_Application.Entity.Model.Preference.EventType)this.lbxSportList.Items[this.lbxSportList.SelectedIndex + 1];
    //Removing items from item source
    EventTypes.Remove(ETU);
    EventTypes.Remove(ETD);
    //Adding items from item source
    ETU.Priority = ETU.Priority + 1;
    ETD.Priority = ETD.Priority - 1;
    EventTypes.Add(ETU);
    EventTypes.Add(ETD);
    //Shorting ListBox Items
    lbxSportList.Items.SortDescriptions.Add(
       new System.ComponentModel.SortDescription("Priority",
      System.ComponentModel.ListSortDirection.Ascending));
  }
}