Chris , this could be a problem of the calling code (maybe wpf), since
withing a Set we haven't a index for items.. And the event handler of
"CollectionChanged" want the index of the item that was remove. You could
see the test here: http://digg.com/u1BO0j(
removeall_should_raise_collectionchanged_for_removeditems).

I don't know how to set with fluent nhibernate the collection type factory.

For the other hand, 100% AGREE with Fabio.
For instance the class that Fabio show to you, in "runtime", implements
INotifyPropertyChanged and IDataErrorInfo.
There is also another behavior for IEditableObject, actually there are
two. You could see how I configure the entity http://digg.com/u1BO11




2009/8/25 Fabio Maulo <fabioma...@gmail.com>

> what I mean is that you can do the same without that boiled code.
>
> 2009/8/25 Chris Willard <chris.will...@rimrockgroup.com>
>
>
>> Those interfaces are implemented in my entity base class
>> (BindableObject) from which GuidPOCO is derived (Section > GuidPOCO >
>> BindableObject).  I am not familiar with the term boiled code, so I am
>> not sure how to respond.  Please let me know if you need any
>> additional info or if I am misunderstanding something.
>>
>> This is how my base class is defined:
>>
>>    public abstract class BindableObject : INotifyPropertyChanged,
>> IEditableObject, IDataErrorInfo
>>
>> Thanks in advance,
>> Chris
>>
>> On Aug 24, 10:53 pm, Fabio Maulo <fabioma...@gmail.com> wrote:
>> > Classes in this domainhttp://
>> code.google.com/p/unhaddins/source/browse/trunk/Examples/uNHAd...
>> > <
>> http://code.google.com/p/unhaddins/source/browse/trunk/Examples/uNHAd..
>> .>are
>> > implementing  INotifyPropertyChanged, IEditableObject, IDataErrorInfo...
>> > but... where is the boiled code ?
>> >
>> > how that entities can work in this video ? (see bottom)
>> http://jfromaniello.blogspot.com/2009/08/nhibernate-and-wpf-viewmodel...
>> >
>> > 2009/8/25 Chris Willard <chris.will...@rimrockgroup.com>
>> >
>> >
>> >
>> > > 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.
>> >
>> > ...
>> >
>> > read more »
>>
>>
>
>
> --
> Fabio Maulo
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to