diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.SharedUI/Controls/AllSelectedCheckboxList.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.SharedUI/Controls/AllSelectedCheckboxList.cs | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/AllSelectedCheckboxList.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/AllSelectedCheckboxList.cs new file mode 100644 index 000000000..6e3cb862f --- /dev/null +++ b/Software/Visual_Studio/Tango.SharedUI/Controls/AllSelectedCheckboxList.cs @@ -0,0 +1,144 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using Tango.Core.Commands; +//using System.Collections; +using System.Linq; +using System.Collections; + +namespace Tango.SharedUI.Controls +{ + public class AllSelectedCheckboxList : ListBox + { + #region Properties + + private ItemsControl _itemsControl; + + public ItemsControl ItemsControl + { + get { return _itemsControl; } + set { _itemsControl = value; } + } + + public bool? AllSelected + { + get { return (bool?)GetValue(AllSelectedProperty); } + set + { + SetValue(AllSelectedProperty, value); + } + } + + public static readonly DependencyProperty AllSelectedProperty = + DependencyProperty.Register("AllSelected", typeof(bool?), typeof(AllSelectedCheckboxList), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(OnAllSelectedChanged))); + + + private static void OnAllSelectedChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + AllSelectedCheckboxList l = o as AllSelectedCheckboxList; + var nv = e.NewValue; + l.AllSelectedChanged((bool?)nv); + } + + public static DependencyProperty ClickCheckBoxCommandProperty = DependencyProperty.Register("ClickCheckBoxCommand", typeof(RelayCommand<object>), typeof(AllSelectedCheckboxList)); + public RelayCommand<object> ClickCheckBoxCommand + { + get { return (RelayCommand<object>)GetValue(ClickCheckBoxCommandProperty); } + private set { SetValue(ClickCheckBoxCommandProperty, value); } + } + + #endregion + + #region "Constructors" + + static AllSelectedCheckboxList() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(AllSelectedCheckboxList), new FrameworkPropertyMetadata(typeof(AllSelectedCheckboxList))); + + } + public AllSelectedCheckboxList() : base() + { + ClickCheckBoxCommand = new RelayCommand<object>(ClickCheckBox); + } + + /// <summary> + /// Clicks the CheckBox.Update Selection ListBoxitem. + /// </summary> + /// <param name="obj">The object.</param> + private void ClickCheckBox(object obj) + { + if (obj is ListBoxItem) + { + ListBoxItem lbItem = obj as ListBoxItem; + CheckBox checkBox = lbItem.FindVisualChildren<CheckBox>().FirstOrDefault(); + if (checkBox != null) + { + bool? check = checkBox.IsChecked; + if (check != null) + { + lbItem.IsSelected = (bool)check; + } + } + } + + if (SelectedItems.Count == 0) + { + AllSelected = false; + } + else if (Items.Count > 0 && SelectedItems.Count == Items.Count) + { + AllSelected = true; + } + else + { + AllSelected = null; + } + } + + #endregion + + #region Override + + /// <summary> + /// When overridden in a derived class, is invoked whenever application code or internal processes call <see cref="M:System.Windows.FrameworkElement.ApplyTemplate" />. + /// </summary> + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + AllSelectedChanged(AllSelected); + + + + } + + protected override void OnSelectionChanged(SelectionChangedEventArgs e) + { + base.OnSelectionChanged(e); + foreach(var addItem in e.AddedItems.OfType<Components.SelectedObject>()) + { + addItem.IsSelected = true; + } + foreach (var removeItem in e.RemovedItems.OfType<Components.SelectedObject>()) + { + removeItem.IsSelected = false; + } + } + + #endregion + + private void AllSelectedChanged(bool? value) + { + if (value == null) + return; + SelectionMode = SelectionMode.Multiple; + if (value == true) + { + SelectAll(); + } + else + { + UnselectAll(); + } + } + } +} |
