123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Controls;
- using System.Windows;
- using System.ComponentModel;
- namespace CyberX8_Themes.CustomControls
- {
- public class MultiComboBox : ComboBox
- {
- static MultiComboBox()
- {
- DefaultStyleKeyProperty.OverrideMetadata(typeof(MultiComboBox), new FrameworkPropertyMetadata(typeof(MultiComboBox)));
- }
- private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
- {
- d.SetValue(e.Property, e.NewValue);
- }
- /// <summary>
- /// 选中项列表
- /// </summary>
- public ObservableCollection<MultiCbxBaseData> ChekedItems
- {
- get { return (ObservableCollection<MultiCbxBaseData>)GetValue(ChekedItemsProperty); }
- set { SetValue(ChekedItemsProperty, value); }
- }
- public static readonly DependencyProperty ChekedItemsProperty =
- DependencyProperty.Register("ChekedItems", typeof(ObservableCollection<MultiCbxBaseData>), typeof(MultiComboBox), new PropertyMetadata(new ObservableCollection<MultiCbxBaseData>(), OnPropertyChanged));
- /// <summary>
- /// ListBox竖向列表
- /// </summary>
- private ListBox _ListBoxV;
- /// <summary>
- /// ListBox横向列表
- /// </summary>
- private ListBox _ListBoxH;
- public override void OnApplyTemplate()
- {
- base.OnApplyTemplate();
- _ListBoxV = Template.FindName("PART_ListBox", this) as ListBox;
- _ListBoxH = Template.FindName("PART_ListBoxChk", this) as ListBox;
- _ListBoxH.ItemsSource = ChekedItems;
- _ListBoxV.SelectionChanged += _ListBoxV_SelectionChanged;
- _ListBoxH.SelectionChanged += _ListBoxH_SelectionChanged;
- if (ItemsSource != null)
- {
- foreach (var item in ItemsSource)
- {
- MultiCbxBaseData bdc = item as MultiCbxBaseData;
- if (bdc.IsCheck)
- {
- _ListBoxV.SelectedItems.Add(bdc);
- }
- }
- }
- }
- private void _ListBoxH_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- foreach (var item in e.RemovedItems)
- {
- MultiCbxBaseData datachk = item as MultiCbxBaseData;
- for (int i = 0; i < _ListBoxV.SelectedItems.Count; i++)
- {
- MultiCbxBaseData datachklist = _ListBoxV.SelectedItems[i] as MultiCbxBaseData;
- if (datachklist.ID == datachk.ID)
- {
- _ListBoxV.SelectedItems.Remove(_ListBoxV.SelectedItems[i]);
- }
- }
- }
- }
- void _ListBoxV_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- foreach (var item in e.AddedItems)
- {
- MultiCbxBaseData datachk = item as MultiCbxBaseData;
- datachk.IsCheck = true;
- if (ChekedItems.IndexOf(datachk) < 0)
- {
- ChekedItems.Add(datachk);
- }
- }
- foreach (var item in e.RemovedItems)
- {
- MultiCbxBaseData datachk = item as MultiCbxBaseData;
- datachk.IsCheck = false;
- ChekedItems.Remove(datachk);
- }
- }
- public class MultiCbxBaseData : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged;
- private int _id;
- /// <summary>
- /// 关联主键
- /// </summary>
- public int ID
- {
- get { return _id; }
- set { _id = value; }
- }
- private string _viewName;
- /// <summary>
- /// 显示名称
- /// </summary>
- public string ViewName
- {
- get { return _viewName; }
- set
- {
- _viewName = value;
- OnPropertyChanged("ViewName");
- }
- }
- private bool _isCheck;
- /// <summary>
- /// 是否选中
- /// </summary>
- public bool IsCheck
- {
- get { return _isCheck; }
- set
- {
- OnPropertyChanged("IsCheck");
- _isCheck = value;
- }
- }
- public virtual void OnPropertyChanged(string propertyName)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- }
- }
- }
|