Yeah, I was thinking he wanted to see the entire entity for some reason...
On Aug 24, 10:06 pm, Fabio Maulo <fabioma...@gmail.com> wrote: > too much boiled code. > > 2009/8/24 Chris Willard <chris.will...@rimrockgroup.com> > > > > > Oh yeah, sorry. I am calling this extension method to remove the > > item: > > > public static void RemoveRange<T>(this ICollection<T> > > collection, IEnumerable<T> items) > > { > > if (items != null) > > { > > foreach (var item in items) > > { > > collection.Remove(item); > > } > > } > > } > > > And this is the entity: > > > using System; > > using System.Collections.Generic; > > using System.Linq; > > using System.Text; > > using RGI.Utilities; > > using RGI.Utilities.Validators; > > using uNhAddIns.WPF.Collections; > > > namespace RGI.BMS.POCO > > { > > [Serializable] > > public class Section : GuidPOCO > > { > > #region Constructors > > > public Section() : base() > > { > > this.SectionNumbers = new ObservableSet<SectionNumber>(); > > } > > > #endregion > > > #region Fields > > > private string _Name; > > private Employee _ModifiedBy; > > private DateTime _ModifiedDate; > > private ICollection<SectionNumber> _SectionNumbers; > > > #endregion > > > #region Properties > > > public virtual string Name > > { > > get { return _Name; } > > set > > { > > _Name = value; > > NotifyPropertyChanged("Name"); > > } > > } > > > public virtual Employee ModifiedBy > > { > > get { return _ModifiedBy; } > > set > > { > > _ModifiedBy = value; > > NotifyPropertyChanged("ModifiedBy"); > > } > > } > > > public virtual DateTime ModifiedDate > > { > > get { return _ModifiedDate; } > > set > > { > > _ModifiedDate = value; > > NotifyPropertyChanged("ModifiedDate"); > > } > > } > > > public virtual ICollection<SectionNumber> SectionNumbers > > { > > get { return _SectionNumbers; } > > set > > { > > _SectionNumbers = value; > > NotifyPropertyChanged("SectionNumbers"); > > } > > } > > > #endregion > > > #region Methods > > > public override int GetHashCode() > > { > > System.Text.StringBuilder sb = new > > System.Text.StringBuilder(); > > > sb.Append(this.GetType().FullName); > > sb.Append(Id); > > sb.Append(_ModifiedBy); > > sb.Append(_ModifiedDate); > > sb.Append(_Name); > > > return sb.ToString().GetHashCode(); > > } > > > #endregion > > > #region Readonly Properties > > > public virtual string NumberDisplay > > { > > get > > { > > StringBuilder bld = new StringBuilder(); > > > //Get sorted list > > var numbers = this.SectionNumbers.OrderBy(o => > > o.Number); > > > foreach (var item in numbers) > > { > > bld.Append(item.Number); > > if (!numbers.Last().Equals(item)) > > bld.Append(", "); > > } > > > return bld.ToString(); > > } > > } > > > #endregion > > > #region Validation > > > public override string this[string columnName] > > { > > get { return CheckValidation(this, columnName); } > > } > > > #endregion > > } > > } > > > Thanks again for all the help, > > Chris > > > On Aug 24, 6:54 pm, José Romaniello <jfromanie...@gmail.com> wrote: > > > Sorry, I want to see the property where you need to put the > > observableset. > > > And the code that you are using to remove an item from that collection. > > > > 2009/8/24 Chris Willard <chris.will...@rimrockgroup.com> > > > > > Below is my base entity class. I have a class (GuidPOCO) that > > > > inherits from BindableObject and just implements an Id property as a > > > > guid along with some vaidation logic. > > > > > /// <summary> > > > > /// Implements the INotifyPropertyChanged interface and > > > > /// exposes a NotifyPropertyChanged method for derived > > > > /// classes to raise the PropertyChange event. The event > > > > /// arguments created by this class are cached to prevent > > > > /// managed heap fragmentation. > > > > /// </summary> > > > > [Serializable] > > > > public abstract class BindableObject : INotifyPropertyChanged, > > > > IEditableObject, IDataErrorInfo > > > > { > > > > #region Data > > > > > private static readonly Dictionary<string, > > > > PropertyChangedEventArgs> eventArgCache; > > > > private const string ERROR_MSG = "{0} is not a public property > > > > of {1}"; > > > > private static readonly object syncLock = new object(); > > > > private HybridDictionary oldState; > > > > > #endregion // Data > > > > > #region Constructors > > > > > static BindableObject() > > > > { > > > > eventArgCache = new Dictionary<string, > > > > PropertyChangedEventArgs>(); > > > > } > > > > > protected BindableObject() > > > > { > > > > > } > > > > > #endregion // Constructors > > > > > #region Public Members > > > > > /// <summary> > > > > /// Raised when a public property of this object is set. > > > > /// </summary> > > > > [field: NonSerialized] > > > > public virtual event PropertyChangedEventHandler > > > > PropertyChanged; > > > > > /// <summary> > > > > /// Returns an instance of PropertyChangedEventArgs for > > > > /// the specified property name. > > > > /// </summary> > > > > /// <param name="propertyName"> > > > > /// The name of the property to create event args for. > > > > /// </param> > > > > public static PropertyChangedEventArgs > > > > GetPropertyChangedEventArgs(string propertyName) > > > > { > > > > if (String.IsNullOrEmpty(propertyName)) > > > > throw new ArgumentException("propertyName cannot be > > > > null or empty."); > > > > > PropertyChangedEventArgs args; > > > > lock (BindableObject.syncLock) > > > > { > > > > if (!eventArgCache.TryGetValue(propertyName, out > > > > args)) > > > > { > > > > eventArgCache.Add(propertyName, args = new > > > > PropertyChangedEventArgs(propertyName)); > > > > } > > > > } > > > > return args; > > > > } > > > > > public abstract bool IsPropertyValid { get; } > > > > > public abstract bool IsValid { get; } > > > > > public abstract string ValidationErrors { get; } > > > > > #endregion // Public Members > > > > > #region Protected Members > > > > > /// <summary> > > > > /// Derived classes can override this method to > > > > /// execute logic after a property is set. The > > > > /// base implementation does nothing. > > > > /// </summary> > > > > /// <param name="propertyName"> > > > > /// The property which was changed. > > > > /// </param> > > > > protected virtual void AfterPropertyChanged(string > > > > propertyName) > > > > { > > > > } > > > > > /// <summary> > > > > /// Attempts to raise the PropertyChanged event, and > > > > /// invokes the virtual AfterPropertyChanged method, > > > > /// regardless of whether the event was raised or not. > > > > /// </summary> > > > > /// <param name="propertyName"> > > > > /// The property which was changed. > > > > /// </param> > > > > protected virtual void NotifyPropertyChanged(string > > > > propertyName) > > > > { > > > > this.VerifyProperty(propertyName); > > > > > PropertyChangedEventHandler handler = > > > > this.PropertyChanged; > > > > if (handler != null) > > > > { > > > > // Get the cached event args. > > > > PropertyChangedEventArgs args = > > > > GetPropertyChangedEventArgs(propertyName); > > > > > // Raise the PropertyChanged event. > > > > handler(this, args); > > > > } > > > > > this.AfterPropertyChanged(propertyName); > > > > } > > > > > #endregion // Protected Members > > > > > #region Private Helpers > > > > > [Conditional("DEBUG")] > > > > private void VerifyProperty(string propertyName) > > > > { > > > > // Thanks to Rama Krishna Vavilala for the tip to use > > > > TypeDescriptor here, instead of manual > > > > // reflection, so that custom properties are honored too. > > > > // > > > >http://www.codeproject.com/KB/WPF/podder1.aspx?msg=2381272#xx2381272xx > > > > > bool propertyExists = TypeDescriptor.GetProperties > > > > (this).Find(propertyName, false) != null; > > > > if (!propertyExists) > > > > { > > > > // The property could not be found, > > > > // so alert the developer of the problem. > > > > > string msg = string.Format( > > > > ERROR_MSG, > > > > propertyName, > > > > this.GetType().FullName); > > > > > Debug.Fail(msg); > > > > } > > > > } > > > > > #endregion // Private Helpers > > > > > #region Implementation of IEditableObject > > > > > public virtual void BeginEdit() > > > > { > > > > oldState = new HybridDictionary(); > > > > foreach (PropertyInfo property in this.GetType > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to nhusers@googlegroups.com To unsubscribe from this group, send email to nhusers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---