namespace System.Windows.Forms { public partial class CheckedListBox { private class Item : INotifyPropertyChangedImpl, IComparable { private CheckedListBox owner { get; } public object Value { get; set; } private bool? isChecked; public bool? IsChecked { get => isChecked; set { if (isChecked != value) { owner.OnItemCheck(new ItemCheckEventArgs(owner.Items.IndexOfItem(this), BoolToCheckState(value), BoolToCheckState(isChecked))); RaiseAndSetIfChanged(ref isChecked, value); } } } private bool? CheckStateToBool(CheckState check) { return check == CheckState.Unchecked ? false : (check == CheckState.Checked ? true : null); } private CheckState BoolToCheckState(bool? check) { return check == false ? CheckState.Unchecked : (check == true ? CheckState.Checked : CheckState.Indeterminate); } public void SetState(CheckState check) { IsChecked = CheckStateToBool(check); } public int CompareTo(object obj) { if (Value is IComparable val && obj is Item item) return val.CompareTo(item.Value); return -1; } public Item(CheckedListBox owner, object value) { this.owner = owner; Value = value; } } } }