123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- using System.Collections;
- using System.ComponentModel;
- namespace System.Windows.Forms
- {
- public partial class ListControl : Control
- {
- protected new System.Windows.Controls.Primitives.Selector control { get; private set; }
- public ObjectCollection Items { get; private set; }
-
- public int SelectedIndex
- {
- get => control.SelectedIndex;
- set => control.SelectedIndex = value;
- }
- public object SelectedItem
- {
- get => control.SelectedItem;
- set => control.SelectedItem = value;
- }
- public bool FormattingEnabled { get; set; }
- public bool IntegralHeight { get; set; } // TODO?
- private bool sorted;
- public bool Sorted
- {
- get => sorted;
- set
- {
- if (value != sorted)
- {
- sorted = value;
- if (value)
- control.Items.SortDescriptions.Add(new SortDescription("", ListSortDirection.Ascending));
- else
- control.Items.SortDescriptions.Clear();
- }
- }
- }
- public object DataSource
- {
- get => control.ItemsSource;
- set
- {
- control.Items.Clear();
- control.ItemsSource = value as IEnumerable;
- }
- }
- public event EventHandler SelectedIndexChanged;
- public event EventHandler SelectedValueChanged;
- protected virtual void OnSelectionChanged(EventArgs e)
- {
- OnSelectedIndexChanged(e);
- OnSelectedValueChanged(e);
- }
- // mimic winforms behavior: do not raise events if the list is empty (for example, when we clear it)
- protected virtual void OnSelectedIndexChanged(EventArgs e)
- {
- if (Items.Count > 0)
- SelectedIndexChanged?.Invoke(this, e);
- }
- protected virtual void OnSelectedValueChanged(EventArgs e)
- {
- if (Items.Count > 0)
- SelectedValueChanged?.Invoke(this, e);
- }
- protected void SetControl(System.Windows.Controls.Primitives.Selector control)
- {
- base.SetControl(control);
- this.control = control;
- control.SelectionChanged += (sender, e) => OnSelectionChanged(e);
- Items = new ObjectCollection(control.Items);
- }
- protected internal virtual object GetItem(int index) => Items[index];
- public int FindStringExact(string text)
- {
- for (int i = 0; i < Items.Count; i++)
- if (GetItem(i).ToString() == text)
- return i;
- return -1;
- }
- public int FindString(string text)
- {
- for (int i = 0; i < Items.Count; i++)
- if (GetItem(i).ToString().StartsWith(text, StringComparison.OrdinalIgnoreCase))
- return i;
- return -1;
- }
- public string GetItemText(object item)
- {
- return item?.ToString() ?? "";
- }
- public void BeginUpdate() { }
- public void EndUpdate() { }
- }
- }
|