CheckedListBox.Item.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. namespace System.Windows.Forms
  2. {
  3. public partial class CheckedListBox
  4. {
  5. private class Item : INotifyPropertyChangedImpl, IComparable
  6. {
  7. private CheckedListBox owner { get; }
  8. public object Value { get; set; }
  9. private bool? isChecked;
  10. public bool? IsChecked
  11. {
  12. get => isChecked;
  13. set
  14. {
  15. if (isChecked != value)
  16. {
  17. owner.OnItemCheck(new ItemCheckEventArgs(owner.Items.IndexOfItem(this), BoolToCheckState(value), BoolToCheckState(isChecked)));
  18. RaiseAndSetIfChanged(ref isChecked, value);
  19. }
  20. }
  21. }
  22. private bool? CheckStateToBool(CheckState check)
  23. {
  24. return check == CheckState.Unchecked ? false :
  25. (check == CheckState.Checked ? true : null);
  26. }
  27. private CheckState BoolToCheckState(bool? check)
  28. {
  29. return check == false ? CheckState.Unchecked :
  30. (check == true ? CheckState.Checked : CheckState.Indeterminate);
  31. }
  32. public void SetState(CheckState check)
  33. {
  34. IsChecked = CheckStateToBool(check);
  35. }
  36. public int CompareTo(object obj)
  37. {
  38. if (Value is IComparable val && obj is Item item)
  39. return val.CompareTo(item.Value);
  40. return -1;
  41. }
  42. public Item(CheckedListBox owner, object value)
  43. {
  44. this.owner = owner;
  45. Value = value;
  46. }
  47. }
  48. }
  49. }