diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.SharedUI/Controls/MultiSelectComboBox.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.SharedUI/Controls/MultiSelectComboBox.cs | 180 |
1 files changed, 39 insertions, 141 deletions
diff --git a/Software/Visual_Studio/Tango.SharedUI/Controls/MultiSelectComboBox.cs b/Software/Visual_Studio/Tango.SharedUI/Controls/MultiSelectComboBox.cs index 94f263be7..dcbc35f60 100644 --- a/Software/Visual_Studio/Tango.SharedUI/Controls/MultiSelectComboBox.cs +++ b/Software/Visual_Studio/Tango.SharedUI/Controls/MultiSelectComboBox.cs @@ -34,35 +34,6 @@ namespace Tango.SharedUI.Controls } } - interface IMultiSelectComboBoxItem - { - string Text { get; set; } - } - public class MultiSelectComboBoxItem : IMultiSelectComboBoxItem - { - public string Text { get; set; } - public MultiSelectComboBoxItem(string text) - { - Text = text; - } - public override string ToString() - { - return Text; - } - } - public class MultiSelectComboBoxSearchItem : IMultiSelectComboBoxItem - { - public string Text { get; set; } - public MultiSelectComboBoxSearchItem(string text = "") - { - Text = text; - } - public override string ToString() - { - return Text; - } - } - [TemplatePart(Name = MultiSelectComboBox.PartEditor, Type = typeof(TextBox))] [TemplatePart(Name = MultiSelectComboBox.PartPopup, Type = typeof(Popup))] public class MultiSelectComboBox : Control @@ -83,9 +54,9 @@ namespace Tango.SharedUI.Controls public MultiSelectComboBox() : base() { SelectedItemsList = new ObservableCollection<object>(); - RemoveAllCommand = new RelayCommand((() => SelectedItemsList.Clear()), () => SelectedItemsList != null && SelectedItemsList.Count > 0); + RemoveAllCommand = new RelayCommand(RemoveAllSelectedItems, () => SelectedItemsList != null && SelectedItemsList.Count > 1); RemoveItemCommand = new RelayCommand<MultiSelectComboBoxItem>((item) => SelectedItemsList.Remove(item), () => SelectedItemsList != null); - AddItemCommand = new RelayCommand<string>((item) => SelectedItemsList.Add(new MultiSelectComboBoxItem(item))); + AddItemCommand = new RelayCommand<string>((item) => SelectedItemsList.Insert(SelectedItemsList.Count-1, new MultiSelectComboBoxItem(item))); SearchText = new MultiSelectComboBoxSearchItem(); Loaded += MultiSelectComboBox_Loaded; _isLoaded = false; @@ -120,14 +91,6 @@ namespace Tango.SharedUI.Controls set { _fetchTimer = value; } } - //private SelectionAdapter _selectionAdapter; - - //public SelectionAdapter SelectionAdapter - //{ - // get { return _selectionAdapter; } - // set { _selectionAdapter = value; } - //} - public ObservableCollection<object> SelectedItemsList { get { return (ObservableCollection<object>)GetValue(SelectedItemsListProperty); } @@ -175,8 +138,9 @@ namespace Tango.SharedUI.Controls public MultiSelectComboBoxSearchItem SearchText { get { return _searchText; } - set {_searchText = value; - RaisePropertyChanged("SearchText"); + set + { + _searchText = value; OnTextChanged(); } } @@ -206,9 +170,11 @@ namespace Tango.SharedUI.Controls Editor.TextChanged += OnEditorTextChanged; Editor.PreviewKeyDown += OnEditorKeyDown; Editor.LostFocus += OnEditorLostFocus; + Editor.GotFocus += OnEditorGotFocus; } } } + this.GotFocus += SelTextBox_GotFocus; } } } @@ -220,24 +186,10 @@ namespace Tango.SharedUI.Controls if (String.IsNullOrEmpty(SearchText.Text)) SearchItemsList.Filter = null; else - SearchItemsList.Filter = new Predicate<object>(o => ((string)o == SearchText.Text)); + SearchItemsList.Filter = new Predicate<object>(o => (((string)o).ToLower().Contains(SearchText.Text.ToLower()))); } } /// <summary> - /// Occurs when a property has changed. - /// </summary> - public event PropertyChangedEventHandler PropertyChanged; - - /// <summary> - /// Raises the property changed event. - /// </summary> - /// <param name="propName">Name of the property.</param> - protected virtual void RaisePropertyChanged(String propName) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName)); - } - - /// <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() @@ -247,31 +199,9 @@ namespace Tango.SharedUI.Controls SelectedItemsList = new ObservableCollection<object>(); SelectedItemsList.Add(SearchText); - SearchItemsList = new ListCollectionView(this.Items); - - //DataTemplate temp = Template.FindName("SearchItem", this) as DataTemplate; - //Editor = Template.FindName(PartEditor, this) as TextBox; Popup = Template.FindName(PartPopup, this) as Popup; - //ItemsSelector = Template.FindName(PartSelector, this) as Selector; - //_partSelectedContent = Template.FindName("PART_SelectedContent", this) as ContentControl; - // BindingEvaluator = new BindingEvaluator(new Binding(DisplayMember)); - - if (Editor != null) - { - Editor.TextChanged += OnEditorTextChanged; - Editor.PreviewKeyDown += OnEditorKeyDown; - Editor.LostFocus += OnEditorLostFocus; - Editor.Focus(); - - //if (SelectedItem != null) - //{ - // Editor.Text = BindingEvaluator.Evaluate(SelectedItem); - //} - - } - - this.GotFocus += SelTextBox_GotFocus; + if (Popup != null) { @@ -279,25 +209,6 @@ namespace Tango.SharedUI.Controls Popup.Opened += OnPopupOpened; Popup.Closed += OnPopupClosed; } - //if (ItemsSelector != null) - //{ - // SelectionAdapter = new SelectionAdapter(ItemsSelector); - // SelectionAdapter.Commit += OnSelectionAdapterCommit; - // SelectionAdapter.Cancel += OnSelectionAdapterCancel; - // SelectionAdapter.SelectionChanged += OnSelectionAdapterSelectionChanged; - // ItemsSelector.PreviewMouseDown += ItemsSelector_PreviewMouseDown; - //} - - //_isUpdatingText = false; - - //ItemsControl iControl = FindName("asd") as ItemsControl; - //iControl.ItemContainerGenerator.ItemsChanged += ItemContainerGenerator_ItemsChanged; - //iControl.ItemContainerGenerator.ContainerFromItem(null); - - //for (int i = 0; i < iControl.Items.Count; i++) - //{ - // FrameworkElement a = iControl.ItemContainerGenerator.ContainerFromIndex(i) as FrameworkElement; - //} } private void OnEditorTextChanged(object sender, TextChangedEventArgs e) @@ -310,38 +221,24 @@ namespace Tango.SharedUI.Controls } FetchTimer.IsEnabled = false; FetchTimer.Stop(); - // SetSelectedItem(null); - if (Editor.Text.Length > 0) - { - // IsLoading = true; - IsToggleChecked = true; - // ItemsSelector.ItemsSource = null; - FetchTimer.IsEnabled = true; - FetchTimer.Start(); - } - else - { - IsToggleChecked = false; - } + IsToggleChecked = true; + + FetchTimer.IsEnabled = true; + FetchTimer.Start(); + } private void OnFetchTimerTick(object sender, EventArgs e) { FetchTimer.IsEnabled = false; FetchTimer.Stop(); + SearchText.Text = Editor.Text; + OnTextChanged(); } private void OnEditorKeyDown(object sender, KeyEventArgs e) { - //if (SelectionAdapter != null) - { - if (IsToggleChecked) - { - // SelectionAdapter.HandleKeyDown(e); - } - else - IsToggleChecked = e.Key == Key.Down || e.Key == Key.Up; - } + IsToggleChecked = true; } private void OnEditorLostFocus(object sender, RoutedEventArgs e) @@ -357,33 +254,20 @@ namespace Tango.SharedUI.Controls Editor?.Focus(); } - private void OnPopupOpened(object sender, EventArgs e) - { - //ItemsSelector.SelectedItem = SelectedItem; - } - private void OnPopupClosed(object sender, EventArgs e) + private void OnEditorGotFocus(object sender, RoutedEventArgs e) { - OnSelectionAdapterCommit(); - + IsToggleChecked = true; } - private void ItemContainerGenerator_ItemsChanged(object sender, System.Windows.Controls.Primitives.ItemsChangedEventArgs e) + + private void OnPopupOpened(object sender, EventArgs e) { } - private void OnSelectionAdapterCommit() + private void OnPopupClosed(object sender, EventArgs e) { IsToggleChecked = false; - // if (ItemsSelector.SelectedItem != null) - // { - // SelectedItem = ItemsSelector.SelectedItem; - // _isUpdatingText = true; - // Editor.Text = GetDisplayText(ItemsSelector.SelectedItem); - // SetSelectedItem(ItemsSelector.SelectedItem); - // _isUpdatingText = false; - // IsDropDownOpen = false; - // } - } + } #region Commands /// <summary> /// The remove all command property for clear SelectedItemsList @@ -405,15 +289,29 @@ namespace Tango.SharedUI.Controls private set { SetValue(RemoveItemCommandProperty, value); } } - + /// <summary> + /// The add item to SelectedItemsList command property + /// </summary> public static DependencyProperty AddItemCommandProperty = DependencyProperty.Register("AddItemCommand", typeof(RelayCommand<string>), typeof(MultiSelectComboBox)); public RelayCommand<string> AddItemCommand { get { return (RelayCommand<string>)GetValue(AddItemCommandProperty); } private set { SetValue(AddItemCommandProperty, value); } } + + /// <summary> + /// Removes all selected items. + /// </summary> + private void RemoveAllSelectedItems() + { + int index = SelectedItemsList.Count - 2; + while (index >= 0) + { + SelectedItemsList.RemoveAt(index--); + } + } #endregion - + } } |
