ListView.ListViewItem.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System.Windows.Media;
  2. namespace System.Windows.Forms
  3. {
  4. public partial class ListViewItem : INotifyPropertyChangedImpl
  5. {
  6. private ListView owner;
  7. private string savedText;
  8. public string Text
  9. {
  10. get => SubItems[0].Text;
  11. set
  12. {
  13. if (SubItems[0].Text != value)
  14. {
  15. SubItems[0].Text = value;
  16. this.RaisePropertyChanged();
  17. }
  18. }
  19. }
  20. private int imageIndex = -1;
  21. public int ImageIndex
  22. {
  23. get => imageIndex;
  24. set
  25. {
  26. imageIndex = value;
  27. ResetImageSource();
  28. }
  29. }
  30. private ImageSource imageSource;
  31. public ImageSource ImageSource
  32. {
  33. get
  34. {
  35. if (imageSource == null)
  36. {
  37. if (owner.SmallImageList != null && imageIndex != -1)
  38. imageSource = owner.SmallImageList.Images.ImageSources[imageIndex];
  39. }
  40. return imageSource;
  41. }
  42. }
  43. public int ImageSourceWidth => owner?.SmallImageList != null ? (int)(owner.SmallImageList.ImageSize.Width / owner.DpiScale) : 16;
  44. public int ImageSourceHeight => owner?.SmallImageList != null ? (int)(owner.SmallImageList.ImageSize.Height / owner.DpiScale) : 16;
  45. private ListViewGroup group;
  46. public ListViewGroup Group
  47. {
  48. get => group;
  49. set
  50. {
  51. group = value;
  52. owner?.Items.ResetBindings();
  53. }
  54. }
  55. private bool isEditing;
  56. public bool IsEditing
  57. {
  58. get => isEditing;
  59. set => this.RaiseAndSetIfChanged(ref isEditing, value);
  60. }
  61. // this is WPF one
  62. private bool isSelected;
  63. public bool IsSelected
  64. {
  65. get => isSelected;
  66. set
  67. {
  68. if (isSelected != value)
  69. {
  70. this.RaiseAndSetIfChanged(ref isSelected, value);
  71. if (owner != null)
  72. owner.DoItemSelect(this);
  73. }
  74. }
  75. }
  76. // this is Winforms one
  77. public bool Selected
  78. {
  79. get => IsSelected;
  80. set => IsSelected = value;
  81. }
  82. public ListViewSubItemCollection SubItems { get; }
  83. public int Index => owner.Items.IndexOf(this);
  84. public object Tag { get; set; }
  85. internal void SetOwner(ListView owner) => this.owner = owner;
  86. internal void ResetImageSource()
  87. {
  88. imageSource = null;
  89. RaisePropertyChanged("ImageSource");
  90. RaisePropertyChanged("ImageSourceWidth");
  91. RaisePropertyChanged("ImageSourceHeight");
  92. }
  93. public void BeginEdit()
  94. {
  95. owner.CancelEdit();
  96. owner.control.UpdateLayout();
  97. var args = new LabelEditEventArgs(owner.Items.IndexOf(this));
  98. owner.DoOnBeforeLabelEdit(args);
  99. if (!args.CancelEdit)
  100. {
  101. savedText = Text;
  102. IsEditing = true;
  103. owner.SetEditedItem(this);
  104. }
  105. }
  106. internal void EndEdit(bool cancel)
  107. {
  108. var args = new LabelEditEventArgs(owner.Items.IndexOf(this), cancel ? null : Text);
  109. owner.DoOnAfterLabelEdit(args);
  110. if (args.CancelEdit)
  111. cancel = true;
  112. IsEditing = false;
  113. if (cancel)
  114. Text = savedText;
  115. owner.SetEditedItem(null);
  116. }
  117. public void Remove() => owner.Items.Remove(this);
  118. public ListViewItem()
  119. {
  120. SubItems = new(this);
  121. }
  122. public ListViewItem(string text) : this()
  123. {
  124. Text = text;
  125. }
  126. public ListViewItem(string text, int imageIndex) : this()
  127. {
  128. Text = text;
  129. ImageIndex = imageIndex;
  130. }
  131. }
  132. }