// -------------------------------------------------------------------------------------------------------------------- // // 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); } } } }