// --------------------------------------------------------------------------------------------------------------------
//
// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
//
//
// A Helper for the ListBox control to provide SelectedItems functionality.
//
// --------------------------------------------------------------------------------------------------------------------
namespace HandBrakeWPF.Helpers
{
using System.Collections;
using System.Windows;
using System.Windows.Controls;
///
/// A Helper for the ListBox control to provide SelectedItems functionality.
///
public class ListBoxHelper
{
///
/// SelectedItems Attached Dependency Property
///
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.RegisterAttached("SelectedItems", typeof(IList), typeof(ListBoxHelper), new FrameworkPropertyMetadata(null, OnSelectedItemsChanged));
///
/// Gets the SelectedItems property. This dependency property
/// indicates ....
///
///
/// The item.
///
///
/// The get selected items.
///
public static IList GetSelectedItems(DependencyObject item)
{
return (IList)item.GetValue(SelectedItemsProperty);
}
///
/// Sets the SelectedItems property. This dependency property
/// indicates ....
///
///
/// The item.
///
///
/// The value.
///
public static void SetSelectedItems(DependencyObject item, IList value)
{
item.SetValue(SelectedItemsProperty, value);
}
///
/// Handles changes to the SelectedItems property.
///
///
/// The item.
///
///
/// The DependencyPropertyChangedEventArgs.
///
private static void OnSelectedItemsChanged(DependencyObject item, DependencyPropertyChangedEventArgs e)
{
ListBox listBox = item as ListBox;
if (listBox != null)
{
ResetSelectedItems(listBox);
listBox.SelectionChanged += delegate { ResetSelectedItems(listBox); };
}
}
///
/// Reset Selected Items
///
///
/// The list box.
///
private static void ResetSelectedItems(ListBox listBox)
{
IList selectedItems = GetSelectedItems(listBox);
selectedItems.Clear();
if (listBox.SelectedItems != null)
{
foreach (var item in listBox.SelectedItems)
selectedItems.Add(item);
}
}
}
}