private void UpdateItems() { ++_updating; try { if (GetItems != null) { // Use the adapter if the check state event is not defined. GetObjectCheckStateDelegate getItemCheckState = GetItemCheckState; if (getItemCheckState == null) { getItemCheckState = new GetObjectCheckStateDelegate(AdaptGetItemCheckState); } SetObjectCheckStateDelegate setItemCheckState = SetItemCheckState; if (setItemCheckState == null) { setItemCheckState = new SetObjectCheckStateDelegate(AdaptSetItemCheckState); } // Recycle the collection of items. ArrayList newItems = new ArrayList(base.Items.Count); using (var recycleBin = new RecycleBin <CheckedListBoxItem>()) { foreach (CheckedListBoxItem item in base.Items) { recycleBin.AddObject(item); } // Extract each item from the recycle bin. foreach (object item in GetItems()) { newItems.Add(recycleBin.Extract( new CheckedListBoxItem(item, GetItemText, getItemCheckState, setItemCheckState))); } } // Replace the items in the control. base.BeginUpdate(); try { // Make sure the same tag is selected. CheckedListBoxItem selectedItem = (CheckedListBoxItem)base.SelectedItem; object selectedTag = selectedItem == null ? null : selectedItem.Tag; base.Items.Clear(); base.Items.AddRange(newItems.ToArray()); base.SelectedIndex = IndexOfTag(selectedTag); } finally { base.EndUpdate(); } } } finally { --_updating; } }
public CheckedListBoxItem(object tag, GetObjectStringDelegate getItemText, GetObjectCheckStateDelegate getItemCheckState, SetObjectCheckStateDelegate setItemCheckState) { _tag = tag; _getItemText = getItemText; _getItemCheckState = getItemCheckState; _setItemCheckState = setItemCheckState; _depText = Dependent.New("CheckedListBoxItem.Text", UpdateText); _depCheckState = Dependent.New("CheckedListBoxItem.CheckState", UpdateCheckState); }
public CheckedListBoxItem( object tag, GetObjectStringDelegate getItemText, GetObjectCheckStateDelegate getItemCheckState, SetObjectCheckStateDelegate setItemCheckState ) { _tag = tag; _getItemText = getItemText; _getItemCheckState = getItemCheckState; _setItemCheckState = setItemCheckState; _depText = Dependent.New("CheckedListBoxItem.Text", UpdateText ); _depCheckState = Dependent.New("CheckedListBoxItem.CheckState", UpdateCheckState); }
private void UpdateItems() { ++_updating; try { if ( GetItems != null ) { // Use the adapter if the check state event is not defined. GetObjectCheckStateDelegate getItemCheckState = GetItemCheckState; if ( getItemCheckState == null ) getItemCheckState = new GetObjectCheckStateDelegate( AdaptGetItemCheckState ); SetObjectCheckStateDelegate setItemCheckState = SetItemCheckState; if ( setItemCheckState == null ) setItemCheckState = new SetObjectCheckStateDelegate( AdaptSetItemCheckState ); // Recycle the collection of items. ArrayList newItems = new ArrayList( base.Items.Count ); using (var recycleBin = new RecycleBin<CheckedListBoxItem>()) { foreach (CheckedListBoxItem item in base.Items) recycleBin.AddObject(item); // Extract each item from the recycle bin. foreach ( object item in GetItems() ) { newItems.Add( recycleBin.Extract( new CheckedListBoxItem( item, GetItemText, getItemCheckState, setItemCheckState ) ) ); } } // Replace the items in the control. base.BeginUpdate(); try { // Make sure the same tag is selected. CheckedListBoxItem selectedItem = (CheckedListBoxItem)base.SelectedItem; object selectedTag = selectedItem == null ? null : selectedItem.Tag; base.Items.Clear(); base.Items.AddRange( newItems.ToArray() ); base.SelectedIndex = IndexOfTag( selectedTag ); } finally { base.EndUpdate(); } } } finally { --_updating; } }