From c6a6469cd2814a7f74da1662a3e9009826fe63b1 Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Tue, 15 Sep 2020 21:43:57 +0800 Subject: [PATCH] Update CheckComboBox.cs --- .../Input/CheckComboBox/CheckComboBox.cs | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs b/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs index 580fb268..ab441453 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/CheckComboBox/CheckComboBox.cs @@ -2,6 +2,7 @@ using System.ComponentModel; using System.Windows; using System.Windows.Controls; +using System.Windows.Data; using System.Windows.Input; using HandyControl.Data; using HandyControl.Interactivity; @@ -103,14 +104,6 @@ namespace HandyControl.Controls CommandBindings.Add(new CommandBinding(ControlCommands.Clear, (s, e) => SelectedItems.Clear())); } - private void Tags_OnClosed(object sender, RoutedEventArgs e) - { - if (e.OriginalSource is Tag tag && tag.Tag is CheckComboBoxItem checkComboBoxItem) - { - checkComboBoxItem.SetCurrentValue(IsSelectedProperty, false); - } - } - public override void OnApplyTemplate() { if (_selectAllItem != null) @@ -161,6 +154,28 @@ namespace HandyControl.Controls public Func> VerifyFunc { get; set; } + protected override void OnSelectionChanged(SelectionChangedEventArgs e) + { + UpdateTags(); + VerifyData(); + + base.OnSelectionChanged(e); + } + + protected override bool IsItemItsOwnContainerOverride(object item) => item is CheckComboBoxItem; + + protected override DependencyObject GetContainerForItemOverride() => new CheckComboBoxItem(); + + protected override void OnDisplayMemberPathChanged(string oldDisplayMemberPath, string newDisplayMemberPath) => UpdateTags(); + + private void Tags_OnClosed(object sender, RoutedEventArgs e) + { + if (e.OriginalSource is Tag tag && tag.Tag is CheckComboBoxItem checkComboBoxItem) + { + checkComboBoxItem.SetCurrentValue(IsSelectedProperty, false); + } + } + private void SwitchAllItems(bool selected) { if (_isInternalAction) return; @@ -182,18 +197,6 @@ namespace HandyControl.Controls private void SelectAllItem_Unselected(object sender, RoutedEventArgs e) => SwitchAllItems(false); - protected override void OnSelectionChanged(SelectionChangedEventArgs e) - { - UpdateTags(); - VerifyData(); - - base.OnSelectionChanged(e); - } - - protected override bool IsItemItsOwnContainerOverride(object item) => item is CheckComboBoxItem; - - protected override DependencyObject GetContainerForItemOverride() => new CheckComboBoxItem(); - private void UpdateTags() { if (_panel == null || _isInternalAction) return; @@ -214,9 +217,10 @@ namespace HandyControl.Controls var tag = new Tag { Style = TagStyle, - Content = checkComboBoxItem.Content, Tag = checkComboBoxItem }; + + tag.SetBinding(ContentControl.ContentProperty, new Binding(DisplayMemberPath) { Source = item }); _panel.Children.Add(tag); } }