/// <summary>Ehes the list view sort.</summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        /// <remarks>
        /// <code>
        /// Behaviour when user clicked on:
        /// - primary sort column: toggle direction of primary sort column, leave secondary as is
        /// - secondary sort column: make old primary sort column now secondary sort column, clicked column now the primary sort column with same direction as formerly secondary sort column
        /// - other column: make old primary sort column now secondary sort column, clicked column now the primary sort column ascending
        /// </code>
        /// </remarks>
        private void EhListViewSort(object sender, RoutedEventArgs e)
        {
            var    columnHeaderClicked = sender as GridViewColumnHeader;
            String sortPropertyName    = columnHeaderClicked.Tag as string;

            bool clickedOnPrimarySortColumn   = columnHeaderClicked.Equals(_currentPrimarySortedColumnHeader);
            bool clickedOnSecondarySortColumn = columnHeaderClicked.Equals(_currentSecondarySortedColumnHeader);

            _listView.Items.SortDescriptions.Clear();
            if (null != _currentSecondarySortedColumnHeader)
            {
                AdornerLayer.GetAdornerLayer(_currentSecondarySortedColumnHeader).Remove(_currentSecondarySortAdorner);
            }
            if (null != _currentPrimarySortedColumnHeader)
            {
                AdornerLayer.GetAdornerLayer(_currentPrimarySortedColumnHeader).Remove(_currentPrimarySortAdorner);
            }

            ListSortDirection newDir = ListSortDirection.Ascending;

            if (clickedOnPrimarySortColumn)
            {
                if (_currentPrimarySortAdorner.Direction == ListSortDirection.Ascending)
                {
                    newDir = ListSortDirection.Descending;
                }

                _currentPrimarySortAdorner = new Common.SortAdorner(_currentPrimarySortedColumnHeader, newDir, false);
            }
            else if (clickedOnSecondarySortColumn)
            {
                newDir = _currentSecondarySortAdorner.Direction;
                _currentSecondarySortAdorner        = new Common.SortAdorner(_currentPrimarySortedColumnHeader, _currentPrimarySortAdorner.Direction, true);
                _currentSecondarySortedColumnHeader = _currentPrimarySortedColumnHeader;

                _currentPrimarySortAdorner        = new Common.SortAdorner(columnHeaderClicked, newDir, false);
                _currentPrimarySortedColumnHeader = columnHeaderClicked;
            }
            else // clicked in any other column
            {
                if (null != _currentPrimarySortedColumnHeader)
                {
                    _currentSecondarySortAdorner        = new Common.SortAdorner(_currentPrimarySortedColumnHeader, _currentPrimarySortAdorner.Direction, true);
                    _currentSecondarySortedColumnHeader = _currentPrimarySortedColumnHeader;
                }

                _currentPrimarySortAdorner        = new Common.SortAdorner(columnHeaderClicked, newDir, false);
                _currentPrimarySortedColumnHeader = columnHeaderClicked;
            }

            AdornerLayer.GetAdornerLayer(_currentPrimarySortedColumnHeader).Add(_currentPrimarySortAdorner);
            _listView.Items.SortDescriptions.Add(new SortDescription(_currentPrimarySortedColumnHeader.Tag as string, _currentPrimarySortAdorner.Direction));

            if (null != _currentSecondarySortedColumnHeader)
            {
                AdornerLayer.GetAdornerLayer(_currentSecondarySortedColumnHeader).Add(_currentSecondarySortAdorner);
                _listView.Items.SortDescriptions.Add(new SortDescription(_currentSecondarySortAdorner.Tag as string, _currentSecondarySortAdorner.Direction));
            }
        }
		/// <summary>Ehes the list view sort.</summary>
		/// <param name="sender">The sender.</param>
		/// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
		/// <remarks>
		/// <code>
		/// Behaviour when user clicked on:
		/// - primary sort column: toggle direction of primary sort column, leave secondary as is
		/// - secondary sort column: make old primary sort column now secondary sort column, clicked column now the primary sort column with same direction as formerly secondary sort column
		/// - other column: make old primary sort column now secondary sort column, clicked column now the primary sort column ascending
		/// </code>
		/// </remarks>
		private void EhListViewSort(object sender, RoutedEventArgs e)
		{
			GridViewColumnHeader columnHeaderClicked = sender as GridViewColumnHeader;
			String sortPropertyName = columnHeaderClicked.Tag as String;

			bool clickedOnPrimarySortColumn = columnHeaderClicked.Equals(_currentPrimarySortedColumnHeader);
			bool clickedOnSecondarySortColumn = columnHeaderClicked.Equals(_currentSecondarySortedColumnHeader);

			_listView.Items.SortDescriptions.Clear();
			if (null != _currentSecondarySortedColumnHeader)
				AdornerLayer.GetAdornerLayer(_currentSecondarySortedColumnHeader).Remove(_currentSecondarySortAdorner);
			if (null != _currentPrimarySortedColumnHeader)
				AdornerLayer.GetAdornerLayer(_currentPrimarySortedColumnHeader).Remove(_currentPrimarySortAdorner);

			ListSortDirection newDir = ListSortDirection.Ascending;

			if (clickedOnPrimarySortColumn)
			{
				if (_currentPrimarySortAdorner.Direction == ListSortDirection.Ascending)
					newDir = ListSortDirection.Descending;

				_currentPrimarySortAdorner = new Common.SortAdorner(_currentPrimarySortedColumnHeader, newDir, false);
			}
			else if (clickedOnSecondarySortColumn)
			{
				newDir = _currentSecondarySortAdorner.Direction;
				_currentSecondarySortAdorner = new Common.SortAdorner(_currentPrimarySortedColumnHeader, _currentPrimarySortAdorner.Direction, true);
				_currentSecondarySortedColumnHeader = _currentPrimarySortedColumnHeader;

				_currentPrimarySortAdorner = new Common.SortAdorner(columnHeaderClicked, newDir, false);
				_currentPrimarySortedColumnHeader = columnHeaderClicked;
			}
			else // clicked in any other column
			{
				if (null != _currentPrimarySortedColumnHeader)
				{
					_currentSecondarySortAdorner = new Common.SortAdorner(_currentPrimarySortedColumnHeader, _currentPrimarySortAdorner.Direction, true);
					_currentSecondarySortedColumnHeader = _currentPrimarySortedColumnHeader;
				}

				_currentPrimarySortAdorner = new Common.SortAdorner(columnHeaderClicked, newDir, false);
				_currentPrimarySortedColumnHeader = columnHeaderClicked;
			}

			AdornerLayer.GetAdornerLayer(_currentPrimarySortedColumnHeader).Add(_currentPrimarySortAdorner);
			_listView.Items.SortDescriptions.Add(new SortDescription(_currentPrimarySortedColumnHeader.Tag as string, _currentPrimarySortAdorner.Direction));

			if (null != _currentSecondarySortedColumnHeader)
			{
				AdornerLayer.GetAdornerLayer(_currentSecondarySortedColumnHeader).Add(_currentSecondarySortAdorner);
				_listView.Items.SortDescriptions.Add(new SortDescription(_currentSecondarySortAdorner.Tag as string, _currentSecondarySortAdorner.Direction));
			}
		}