2010-07-09  Rolf Bjarne Kvinge  <RKvinge@novell.com>

	* CollectionViewNode.cs:
	* BindingExpressionBase.cs: 
	* StandardPropertyPathNode.cs: Make sure we don't leak exceptions to native
	code. Update to call p/invoke directly instead of a wrapper method on
	DependencyObject to set any delegate callbacks.

2010-07-08  Alan McGovern  <amcgovern@novell.com>

	* StandardPropertyPathNode.cs: If TypeName cannot be resolved
	  to a type, treat the binding as a regular broken binding
	  node. Don't throw an exception.

2010-07-08  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: An FE is mentor bound if it has a
	  binding on it's DataContext and it's Parent element is null.

2010-06-18  Rolf Bjarne Kvinge  <RKvinge@novell.com>

	* Binding.cs:
	* CollectionViewGroup.cs:
	* CollectionViewSource.cs:
	* PropertyGroupDescription.cs: Update to SL4 final API.

2010-06-03  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If the datasource implements
	  INotifyDataError we should use it. Stops 232 from hanging,
	  woo!

2010-06-03  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Only capture validation exceptions
	  if ValidatesOnExceptions is true, just like the way we only
	  capture data errors if ValidatesOnDataError is true.
	  Simplify the emit error code a bit too.

2010-06-03  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Tighten up the places where we
	  emit validation errors. Fixes some more of 232.

2010-06-02  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Only emit data errors if
	  ValidatesOnDataErrors is true. Also check for data errors
	  when the PropertyPathWalker value updates.

2010-06-02  Alan McGovern  <amcgovern@novell.com>

	* IPropertyPathNode.cs:
	* BindingExpressionBase.cs: Put in initial support for
	  IDataErrorInfo objects. Passes the basic tests in drt 232.

2010-06-02  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: We now pass all the V3 Validation
	  tests in drt 232. hurrah!

2010-06-02  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Update our implementation of
	  mentors to allow us to listen for changes to the mentor and
	  correctly NULL it out when the mentor is destroyed as if we
	  were to ref the mentor we'd create a cycle.

2010-06-01  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Implement the first section of
	  mentor based databinding. When doing DataContext based
	  bindings on DependencyObjects, we get the DataContext from
	  the first FrameworkElement in the actual tree (not visual
	  tree). This FE is known as the 'mentor'. 

2010-05-31  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: We should only seal the binding
	  after all validation is successful. Add in a missing sanity
	  check to make sure two way bindings don't have a stupid
	  path.

2010-05-31  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: we aren't guaranteed that the item
	  is a FrameworkElement now so add in some debug spew for
	  cases where we add DataContext based bindings on
	  DependencyObjects (like brushes).

2010-05-31  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewNode.cs: If the CollectionViewNode is given an
	  actual ICollectionView, we need to attach handlers to the
	  CurrentChanged event too.

	* PropertyPathWalker.cs: Only the final node cares about
	  whether it binds directly to the view or not.

	* StandardCollectionView.cs: We should raise the
	  CollectionChanged event before calling MoveCurrentTo
	  otherwise we might confuse things which have bound to the
	  collection.

	* BindingExpressionBase.cs: If we're binding to the
	  datacontext we have to use the view itself, not the current
	  item.

2010-05-28  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: We now use the 'force' variable
	  in MoveCurrentTo to indicate whether we should emit the
	  CurrentChanging/CurrentChanged events regardless of whether
	  the item is actually changing. This is needed because
	  calling Refresh on the ICV always emits the events.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Revert this change as it breaks
	  moon-units. The DRT must be fixed a different way..

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathWalker.cs: An empty binding ( {Binding} ) means
	  that we bind directly to the ICollectionView if it exists.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* CollectionView.cs: Implement the IComparer<object> interface
	  on CollectionView to keep the DRTs happy. It gives the wrong
	  results though...

	* StandardCollectionView.cs: We raise the changing events if
	  either the item or position has changed.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* PropertyComparer.cs: If there are no sort descriptions,
	  pretend there was one ascending comparer.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* CollectionView.cs:
	* StandardCollectionView.cs:
	* EnumerableCollectionView.cs: Rename StandardCollectionView
	  to be ListCollectionView to keep the DRTs happy. Stupid
	  drts.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: If an item is added to the source
	  collection but is filtered out, we shouldn't raise the
	  INCC.Add event.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Propagate the CollectionChanged
	  event when the source collection does a Reset.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs:
	* EditableCollectionView.cs: Strip out the
	  IEditableCollectionView properties into the new
	  'EditableCollectionView' class.

2010-05-27  Alan McGovern  <amcgovern@novell.com>

	* CollectionView.cs:
	* StandardCollectionView.cs: Make StandardCollectionView
	  inherit from CollectionView and move all the ICollectionView
	  properties there.

2010-05-26  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: We have to support removing
	  items from multiple collection view groups now so don't
	  remove empty groups as we iterate, do a separate loop at the
	  end. This can all be done in one loop if I remember to
	  rewrite it later ;)

	* StandardCollectionView.cs: Ensure we remove the item from
	  the root group when the item is filtered out. When finding
	  the correct index of the new item when sorting is enabled,
	  we need to binary search the filteredList, not the source
	  collection. If there's filtering and we binary search teh
	  source collection, we'll get crazy indices and die. Finally
	  use the correct values when raising the collection changed
	  event.

2010-05-26  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: If GroupNameFromItem returns
	  a collection (IList?) we need to enumerate that and add the
	  current item to each CollectionViewGroup in the IList.

	* PropertyGroupDescription.cs: Make GroupNameFromItem a little
	  prettier. Also fix a case of bad caching - we need to null
	  the property path walker whenever the propertyName changes
	  so we re-create a new one with the new path.

	* StandardCollectionView.cs: When calling AddNew () we need to
	  add the item to the group before adding it to the source
	  collection. If we don't IndexOf () the item will return -1
	  when we respond to the INotifyCollectionChanged for the
	  source collection. Also fix some cases where we weren't
	  throwing exceptions in the right place.

2010-05-25  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* BindingExpressionBase.cs: User Helper.AreEqual as the method
	  of deciding whether or two values are equal.

2010-05-21  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathWalker.cs: Add a helper method "GetValue" to
	  PropertyPathWalker for cases where you just want the value
	  but don't want to attach listeners and all that.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Remove the fastpath as it's not
	  required anymore. The bugs which lead to this code have been
	  fixed.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Implement CanFilter and CanSort
	  as "return true" until a test says this is wrong

	* EnumerableCollectionView.cs: Make EnumerableCollectionView
	  forward any property change events as appropriate.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: Register the DPs with the right
	  names.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Ensure that CanAddNew and
	  CanRemove are both updated whenever any of the 'Add' or
	  'Edit' methods are called. Fixes a small regression in 232
	  from a previous commit.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: You can't remove an item if we're
	  in AddNew mode. Throw exceptions in Remove/RemoveAt if we're
	  in edit/add mode.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Add in some more error checking.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: We can only auto-create items if
	  there's a public parameterless constructor.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: If CanRemove is false, throw an
	  InvalidOperationException if we try to remove.l

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: If we're sorting or grouping the
	  actual indices of the elements are different to those in the
	  source collection. When raising the INCC event we need to
	  create new event args with the correct indices. We also need
	  to mangle "Replace" events into a Remove and Add event as a
	  replace in the source collection could result in an item
	  being removed at index 4 and another one being added at
	  index 10 in the actual collection. Very sneaky!

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: An easy one this time,
	  remove empty groups from the tree.

2010-05-20  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: A simple "resort the collection
	  after editing" isn't good enough for 232. The same logic as
	  for CommitNew is required - we need to binary search the
	  list and re-insert the item in the correct place iif it
	  needs to be moved.

2010-05-19  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: We need to invoke the
	  IEditableObject interface when adding/committing/cancelling
	  a new item.

2010-05-19  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Handle the case where we edit an
	  item so that it gets filtered out.

2010-05-19  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Update the 'CanRemove' variable
	  properly and change the various INPP properties in the
	  correct order when committing an edit to appease the mighty
	  drt 232.

2010-05-19  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: 1) When refreshing the collection
	  we always keep the same CurrentItem and just refresh the
	  CurrentPosition if the item has changed index.
	2) When refreshing, if we previously had an item selected but
	  now that item is not in the filtered collection we just
	  select the first item in the filtered list.
	3) When committing an edit we need to reseat the item in its
	  group and also resort our filtered list in case we changed
	  the property we group/sort by.

2010-05-19  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Add some more missing exceptions
	  and update accordingly.

2010-05-19  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: It's actually pretty damn
	  tough to get IndexOfSubtree to work right so I've just
	  replaced it by creating an enumerator and iterating over the
	  tree structure. It's not the most efficient but it
	  definitely works in all cases.

	* StandardCollectionView.cs: When we add/remove an item from
	  the source collection we need to get the actual index of the
	  item in the sorted/grouped/filtered collection and use that
	  to adjust the current selection. Fix an issue in
	  RemoveFromFilteredAndGroup where we added the item to the
	  group again instead of removing it. Fixes yet more of 232.

2010-05-18  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs:
	* StandardCollectionViewGroup.cs: Add the ability to add items
	  to CollectionViewGroups while ignoring the SortDescriptions.
	  Fix several issues where we were getting the index from the
	  wrong collection which was breaking the MoveCurentTo logic
	  when elements were added/removed. Fixes the new moon-units
	  and more of drt 232.

2010-05-18  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs:
	* StandardCollectionViewGroup.cs: Fix up how we insert items
	  to the filtered collection when sorting is enabled. In some
	  cases we appear to binary search and insert the item, in
	  others we do a linear search and insert.

2010-05-17  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Update the IsEmpty property.

2010-05-17  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Fix the implementation of
	  Contains now that we don't always use the filtered list.

2010-05-13  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs:
	* ICollectionViewFactory.cs: Add in the ICollectionViewFactory
	  interface and make CollectionViewSource use it.

2010-05-13  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: When committing a new item we
	  need to check if it passes the filter. If it does not we
	  need to remove it and select the item at the index before
	  it. If it passes the filter we need to sort it into the
	  correct place instead of leaving it at the end of the array
	  if the ICV is in sorting mode.

2010-05-13  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Raise the CollectionChanged event
	  when adding a new item and add a test on it. Fixes more of
	  232.

2010-05-13  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Add extra tests to ensure that we
	  emit PropertyChanged events correctly for CurrentItem and
	  CurrentPosition. Both fields need to be updated before any
	  event is raised.

2010-05-12  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: This bit wasn't supposed to be
	  part of my last commit. Fixes the regressions in moon-unit
	  and 232 caused by my last commit.

2010-05-12  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: When we add a new item to the ICV
	  we need to refresh it. We also need to keep that item
	  selected after we refresh.

2010-05-12  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: When we call AddNew we need to
	  select the new item automatically. We also need to throw
	  exceptions if we try to CommitNew or CancelNew while
	  editing. Fixes another few tests in 232.

2010-05-12  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: Call the factory method to create
	  the correct type of collection view.

	* CollectionView.cs: Add a CollectionView class which contains
	  a factory method to create the correct ICollectionView for a
	  given source collection.

	* EnumerableCollectionView.cs: Add a new
	  EnumerableCollectionView which works with IEnumerables which
	  are not ILists.

	* StandardCollectionView.cs: Refactor StandardCollectionView
	  so that it only accepts an IList.

2010-05-12  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Refactor StandardCollectionView
	  so that we only use the filtered list when we are grouping,
	  filtering or sorting. Fixes more of 232 and the new
	  moon-units.

2010-05-11  Alan McGovern  <amcgovern@novell.com>

	* GroupEnumerator.cs: We aren't guaranteed that items will
	  only live in leaf elements of the Group tree. Update the
	  GroupEnumerator to take this into account.

2010-05-11  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: StandardCollectionView has
	  two distinct ways of adding/removing/clearing the items.
	  AddItem/RemoveItem/ClearItems do as you'd expect, they
	  add/remove/clear the items in that group.
	  AddInSubtree/RemoveInSubtree recurse through the groups and
	  add/remove items from the leaf elements of the group.
	  ClearSubtree clears all the items in the leaf elements but
	  not the groups themselves.

	* StandardCollectionView.cs: 1) Handle
	  INotifyCollectionChanged events properly rather than just
	  calling Refresh () otherwise we'll regenerate the Groups
	  collection too frequently
	2) When calling 'AddNew' we now add the new item to the
	  correct group while it's pending and when it's finally
	  committed.

2010-05-11  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: Cache the views that the
	  CollectionViewSource creates to allow more of drt 232 to
	  succeed. Note that we need to use a weak dictionary of some
	  sort as opposed to a regular Dictionary<K, V> otherwise
	  we'll never be able to pass 232.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* PropertyComparer.cs: Nuke a CWL.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewNode.cs:
	* PropertyPathWalker.cs:
	* BindingExpressionBase.cs: We bind directly to the View
	  instead of the CurrentItem when the type of the DP is
	  IEnumerable or ICollectionView.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Raise the Reset CollectionChanged
	  event when the filtered items change so that listeners are
	  informed of the modifications.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: When the view changes we need to
	  refresh it immediately so that it gets filtered/sorted.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewNode.cs: Listen for changes to
	  CollectionViewSource.View

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: If CollectionViewSource.Source is
	  set to null we need to null the View.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* BindingExpression.cs:
	* BindingOperations.cs:
	* BindingExpressionBase.cs: Move the Expression handling code
	  from FrameworkElement to DependencyObject so that we can
	  support the new SL4 databinding capabilities.

	* PropertyPathWalker.cs: If the property path is null or empty
	  we still need to use a CollectionViewNode so we can handle
	  cases where the source of your binding is an ICollectionView
	  object and no path has been specified.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewNode.cs: Don't try to access the view if it's
	  null.

2010-05-10  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: If the view is null there's no need
	  to refresh. Fixes a null deref in drt 232.

2010-05-07  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathWalker.cs:
	* CollectionViewNode.cs: Fix how we handle binding to
	  properties which exist on ICollectionView so that it doesn't
	  break BindsDirectlyToSource. yada yada drt 232 works better.


2010-05-07  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Add support for IEditableObject
	  which fixes yet more of drt 232.

2010-05-07  Alan McGovern  <amcgovern@novell.com>

	* GroupEnumerator.cs:
	* StandardCollectionView.cs: Add support for enumerating over
	  the Groups if the CollectionView has been grouped.

2010-05-07  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Implement support for 'Remove'
	  and 'RemoveAt'. Fixes another drt 232 subtest.

2010-05-07  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Implement IEditableCollectionView
	  on StandardCollectionView and add a bunch of tests covering
	  the implementation. drt 232 gets even further now!

2010-05-07  Alan McGovern  <amcgovern@novell.com>

	* INPCProperty.cs: Add a helper class to simplify implementing
	  INotifyPropertyChanged class.

	* StandardCollectionView.cs: The default implementation of
	  ICollectionView is also an IEditableCollectionView.
	  Implement parts of this interface. Allows more of 232 to
	  pass.

2010-05-06  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: If the GroupDescriptions or
	  SortDescriptions are modified we need to refresh the view.
	  Allows more of 232 to succeed.

2010-05-06  Alan McGovern  <amcgovern@novell.com>

	* IndexedPropertyPathNode.cs: For cases where the Source is an
	  IList we should just use the IList Indexer. This fixes the
	  case where we index into an array as opposed to a List<T>.
	  Allows more of drt 232 to pass.

2010-05-06  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: The default implementation of
	  CollectionView needs to be INPC. Allows more of drt 232 to
	  pass.

	* CollectionViewSource.cs: I no longer rely on the source
	  collection being an IList internally and tests show we need
	  to support IEnumerable, so lets support it! Allows more of
	  drt 232 to pass.

2010-05-06  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewNode.cs: 'BindsDirectlyToSource' actually
	  means 'binds directly to an ICollectionView if it can be
	  found'. Fixes more of DRT 232.

	* PropertyPathWalker.cs: We bind directly to source if the
	  property we're binding to exists on ICollectionView. i.e. if
	  we try to bind to 'CurrentPosition' we will bind to the
	  property on ICollectionView as opposed to the
	  'CurrentPosition' property on the 'CurrentItem'.

2010-05-06  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewNode.cs: If we have a CollectionViewSource, we
	  use the View from that as our datasource. If we have a
	  CollectionView, we use that directly. Allows more of DRT 232
	  to pass.

	* PropertyPathWalker.cs: We need to put a CollectionViewNode
	  before each Standard or Indexed node as we need to be able
	  to support CollectionViewNodes at any depth in the property
	  path. Allows more of DRT 232 to pass.

2010-05-05  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathWalker.cs:
	* CollectionViewNode.cs:
	* BindingExpressionBase.cs: Implement support for using
	  CollectionViewSources as the datasource in bindings. This
	  allows us to support Binding.BindsDirectlyToSource properly
	  now.

2010-05-05  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: Propagate
	  CollectionViewSource.Culture to the View.

	* StandardCollectionView.cs: Correctly use
	  CollectionView.Culture when calling
	  GroupDescription.GroupNameFromItem.

2010-05-04  Alan McGovern  <amcgovern@novell.com>

	* PropertyComparer.cs: Implement a Comparer which can follow
	  PropertyPaths and compare the objects at the end of the
	  path. 

	* StandardCollectionView.cs: When refreshing the view we now
	  use the SortDescriptions to properly sort the objects before
	  grouping them.

	* CollectionViewSource.cs: We need to propagate changes to the
	  SortDescriptions to the View the same as we do for
	  GroupDescriptions.

2010-05-04  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs:
	* StandardCollectionView.cs: CollectionViewSource passes a
	  Predicate<object> to its CollectionView so that the view can
	  invoke the event handlers attached to the
	  CollectionViewSource.Filter event.

2010-05-04  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: When clearing the items we
	  need to set the ItemCount to zero.

	* StandardCollectionView.cs: StandardCollectionView needs to
	  store a filtered copy of source collection. This makes it
	  easy to move forward/backward in the collection and provide
	  the correct indices for objects.

2010-04-30  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs:
	* StandardCollectionViewGroup.cs: Correctly set IsBottomLevel
	  and ItemCount.

2010-04-30  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionViewGroup.cs: Implement the rest of the
	  default implementation of the CollectionViewGroup.

	* StandardCollectionView.cs: Implement the logic to create the
	  CollectionViewGroups from the GroupDescriptions.

2010-04-29  Alan McGovern  <amcgovern@novell.com>

	* IDeferRefresh.cs:
	* UpdateDeferrer.cs: Create an IDeferRefresh interface to
	  simplify the implementation of DeferRefresh for classes
	  which support this. Refactor Deferrer to use this interface.

	* CollectionViewSource.cs: Implement DeferRefresh using the
	  IDeferRefresh machinery. Propagate of the GroupDescriptions
	  to View.GroupDescriptions.

	* StandardCollectionView.cs: Implement DeferRefresh using the
	  IDeferRefresh machinery.

	* StandardCollectionViewGroup.cs: Add a basic implementation
	  of CollectionViewGroup for internal use.

2010-04-29  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Add some new tests for the
	  default CollectionView implementation, make some of them
	  pass.

2010-04-28  Alan McGovern  <amcgovern@novell.com>

	* StandardCollectionView.cs: Add tests for the default
	  implementation of ICollectionView and make them pass.

2010-04-27  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs:
	* StandardCollectionView.cs: Add the beginnings of a default
	  implementation of ICollectionView.

2010-04-23  Alan McGovern  <amcgovern@novell.com>

	* PropertyGroupDescription.cs: Once we walk the property path,
	  we should reset the source to null.

2010-04-23  Alan McGovern  <amcgovern@novell.com>

	* PropertyGroupDescription.cs: Fix a stupid typo where I used
	  the incorrect string.

2010-04-22  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewSource.cs: These DPs should not be core or
	  readonly.

2010-04-22  Alan McGovern  <amcgovern@novell.com>

	* UpdateDeferrer.cs: Create the 'UpdateDeferrer' class to
	  implement CollectionViewSource.DeferRefresh ()

	* PropertyGroupDescription.cs: Implement
	  PropertyGroupDescription with tests.

	* CollectionViewSource.cs: Partially implement
	  CollectionViewSource.

2010-04-21  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If the call to string.Format
	  throws an exception, we need to use the fallback value, so
	  wrap that block of code in the try/catch too. Fixes part of
	  drt 233.

2010-04-21  Alan McGovern  <amcgovern@novell.com>

	* StandardPropertyPathNode.cs: Call Types.Ensure before
	  attempting a DP lookup, otherwise it's possible we'd look up
	  the DP before it's registered. Fixes part of drt 233.

2010-04-08  Alan McGovern  <amcgovern@novell.com>

	* Binding.cs: Implement some new SL4 binding properties.

2010-04-08  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: We shouldn't attach the handler if
	  it's a OneTime binding. I mis-interpreted the test result in
	  drt 232. The bug exposed there is that our OnLoaded handling
	  is synchronous instead of async.

2010-04-07  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: When updating the source of a two
	  way binding, we need to process TargetNullValue before
	  calling the binding converter. Fixes more of 232.

2010-04-07  Alan McGovern  <amcgovern@novell.com>

	* IndexedPropertyPathNode.cs: If the getter for an Indexed
	  node throws an exception, we treat the node as being broken.
	  Fixes more of DRT 232.

2010-04-07  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Attach the event handler even if
	  it's a one-time binding otherwise we'll never read the value
	  from the PropertyPathWalker.

	* PropertyPathNode.cs:
	* StandardPropertyPathNode.cs: Add an 'UpdateValue' method so
	  that there's one clear concise way of updating the value for
	  PropertyPathNodes.

	* IndexedPropertyPathNode.cs: If the index in a PropertyPath
	  can be converted to an int and there's an indexer property
	  which takes an int, we use that indexer. Otherwise we look
	  for an indexer which accepts a string and use that.

2010-04-07  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathParser.cs: Fix a bug parsing property paths like
	  [index].Property

2010-04-07  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: I tell a lie, we need to use the
	  TryParse method after the call to Binding.Converter. Fixes a
	  regression in moon-unit.

2010-04-07  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: When bindings are updating we need
	  to check if the destination type has any static Parse ()
	  methods. If so, we need to invoke them before invoking the
	  Converter supplied by the binding.

2010-04-06  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Use the Binding.ConverterCulture
	  if it's supplied, otherwise use the one in
	  FrameworkElement.Language, finally fall back to the default.

2010-04-06  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathWalker.cs:
	* IndexedPropertyPathNode.cs: Update the handling of indexed
	  binding expressions to SL4 compatibility. It no longer
	  throws exceptions on negative indices or indices which
	  cannot be converted to an integer.

2010-04-06  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Add property support for
	  Binding.FallbackValue and Binding.TargetNullValue. Passes
	  the relevant sections of drt 232 and also the new moonunits.

2010-04-01  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: 1) Add support for
	  Binding.StringFormat
	2) When the value we've databound to changes, Invalidate the
	  binding and reseat it by calling SetValue (Property, this)
	  rather than SetValue (Property, newValue), This means we
	  have one codepath for setting values which handles all the
	  type converting we might/might not have to do. Previously we
	  would skip the type converting step.
	3) Raise the BindingValidationError event properly if an error
	  occurs.

	* Binding.cs:
	* BindingBase.cs: Implement BindingBase and move call support
	  code for 'IsSealed' to BindingBase to conform with the new
	  SL4 api.

2010-03-24  Alan McGovern  <amcgovern@novell.com>

	* CollectionViewGroup.cs: Implement CollectionViewGroup enough
	  to let DRT 872 run to completion. It still has MediaElement
	  issues though.

2010-03-23  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: 1) Refactor the managed
	  DependencyProperty.GetValue () to take a Type::Kind
	  parameter so the correct default value metadata is returned.
	2) Ensure we instantiate a new PropertyMetadata every time we
	  call GetMetadata (Type) as the default value can change
	  depending on the Type argument.

2010-03-23  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: 1) Refactor the managed
	  DependencyProperty.GetValue () to take a Type::Kind
	  parameter so the correct default value metadata is returned.
	2) Ensure we instantiate a new PropertyMetadata every time we
	  call GetMetadata (Type) as the default value can change
	  depending on the Type argument.

2010-03-10  Alan McGovern  <amcgovern@novell.com>

	* IndexedPropertyPathNode.cs: Correctly handle the case where
	  an indexed Binding is attached before the collection has
	  been initialized.

2010-03-09  Alan McGovern  <amcgovern@novell.com>

	* IndexedPropertyPathNode.cs: Add tests to make sure we handle
	  large and negative indices when databinding to ILists.

2010-03-05  Rolf Bjarne Kvinge  <RKvinge@novell.com>

	* CollectionViewGroup.cs:
	* PropertyGroupDescription.cs:
	* Binding.cs:
	* BindingBase.cs: Update to SL4 beta API.

2010-03-02  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Ignore the ValueChanged event we
	  get when detaching a binding as it is irrelevant and can
	  cause a crash by passing null to the target property and
	  that's an invalid value for that property.

2010-03-01  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Remove two FIXMEs which have been
	  dealt with.

2010-03-01  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathParser.cs: Fix the test so it passes on SL and
	  then make our code throw the right exception.

2010-02-25  Alan McGovern  <amcgovern@novell.com>

	* BindingOperations.cs: Add some tests for the
	  BindingOperations class and fix the implementation
	  accordingly.

2010-02-25  Alan McGovern  <amcgovern@novell.com>

	* BindingOperations.cs: Add an initial implementation of
	  BindingOperations to get some sites going.

2010-02-19  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* PropertyNodeType.cs:
	* IPropertyPathNode.cs:
	* PropertyPathWalker.cs:
	* PropertyPathParser.cs:
	* IndexedPropertyPathNode.cs:
	* StandardPropertyPathNode.cs: Add a separate
	  PropertyPathParser class so that PropertyPaths can be parsed
	  into their component pieces and also throw exceptions in the
	  right places. 

2010-02-19  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* IndexedPropertyPathNode.cs: Add missing license header to
	  two files.

2010-02-19  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathWalker.cs:
	* StandardPropertyPathNode.cs: Add support for binding to
	  attached DPs. The error handling isn't correct yet, but
	  valid bindings should parse fine.

2010-02-19  Alan McGovern  <amcgovern@novell.com>

	* StandardPropertyPathNode.cs: Refactor DP.Lookup so that we
	  can have a TryLookup method which doesn't throw exceptions.
	  This removes a lot of annoying spew when databinding CLR
	  properties which don't have a backing DP.

2010-02-15  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Merge
	  TemplateBindingExpression.UpdatingTarget and
	  BindingExpressionBase.UpdatingSource into
	  Expression.Updating. The variables mean the same thing and
	  it simplifies some of our logic.

2010-02-15  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: BindingExpressions shouldn't do
	  setup in their constructor as they can be detached from one
	  FrameworkElement and attached to another and they should
	  still work. 

2010-02-10  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Unregress drt 508 by disconnecting
	  the property path listener when the binding is destroyed.

2010-02-09  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs:
	* IndexedPropertyPathNode.cs:
	* StandardPropertyPathNode.cs: When we set a binding like:
	  fe.SetBinding (SomeClass.SomeProperty, binding), we only
	  listen for property changed notifications on 'SomeProperty'
	  if it's a user registered DP. Otherwise we do the usual
	  thing and only update the source of the binding inside
	  FrameworkElement.SetValueImpl.

2010-02-09  Rolf Bjarne Kvinge  <RKvinge@novell.com>

	* CollectionViewSource.cs: Fix compiler warnings.

2010-02-08  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* StandardPropertyPathNode.cs: Add better support for
	  databinding to a DP directly or via its string name.

2010-02-04  Alan McGovern  <amcgovern@novell.com>

	* StandardPropertyPathNode.cs: Make StandardPropertyPath look
	  for a DependencyProperty rather than just a PropertyInfo so
	  that it can listen for property changed events. This fixes
	  the volume control slider in olympics.

2010-02-04  Alan McGovern  <amcgovern@novell.com>

	* StandardPropertyPathNode.cs: Remove duplicate code.

2010-02-01  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* IPropertyPathNode.cs:
	* PropertyPathWalker.cs:
	* IndexedPropertyPathNode.cs:
	* StandardPropertyPathNode.cs: Make the new classes internal
	  and also put them in the right namespace.

2010-02-01  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* IPropertyPathNode.cs:
	* PropertyPathWalker.cs:
	* BindingExpressionBase.cs:
	* IndexedPropertyPathNode.cs:
	* StandardPropertyPathNode.cs: Split PropertyPathNode into
	  StandardPropertyPathNode and IndexedPropertyPathNode. This
	  way a path like "List[0].Name" is split into three nodes:
	  "List" "[0]" and "Name". This simplifies the logic required
	  to update the source in a two way binding. Indexed nodes
	  also need to hook into INotifyCollectionChanged if that
	  interface has been implemented.

2010-02-01  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Move code which requires elevated
	  security attributes out of an anonymous delegate so the sec.
	  attrs. dont get messed up.

2010-02-01  Alan McGovern  <amcgovern@novell.com>

	* PropertyPathNode.cs:
	* PropertyPathWalker.cs:
	* BindingExpressionBase.cs: Refactor the BindingExpression
	  code so that any objects which implement
	  INotifyPropertyChanged in the property path are monitored
	  for changes so that the BindingExpression can update when
	  the relevant properties are modified. This is implemented by
	  creating a linked list of PropertyPathNodes, each of which
	  represents a segment of the PropertyPath. Each node
	  hooks/unhooks from INotifyPropertyChanged and updates its
	  child nodes when a change is detected.

2010-01-29  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Add much better handling for
	  property paths which contain objects implementing
	  INotifyPropertyChanged. We can still fail for the case where
	  a property path contains objects with and without INPC as we
	  invalidate too aggressively. Fixes some issues in the
	  olympics player.

2010-01-29  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Add a testcase for when we
	  databind to a property like "A.B.C" and 'B' is an object
	  implementing INotifyPropertyChanged. In this case we need to
	  attach our INPC handlers to 'B' as opposed to the source
	  object (Binding.Source/DataContext etc) of the Binding.

2010-01-26  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: The method access check should be
	  done by the security system, not manually.

2010-01-14  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Get rid of some of the bonus API
	  points we've accumulated.

2010-01-12  Alan McGovern  <amcgovern@novell.com>

	* BindingExpression.cs:
	* BindingExpressionBase.cs: Implement support for explicitly
	  updated two way bindings and add tests to cover that.

2010-01-11  Alan McGovern  <amcgovern@novell.com>

	* BindingExpression.cs: Implement and add tests for the new
	  ParentBinding and DataItem properties in BindingExpression.

2010-01-07  Jeffrey Stedfast  <fejj@novell.com>

	* CollectionViewSource.cs, FilterEventArgs.cs,
	FilterEventHandler.cs: Added.

2009-12-31  Sebastien Pouliot  <sebastien@ximian.com>

	* BindingExpressionBase.cs: Use faster char overload when using
	LastIndexOf (gendarme)

2009-12-15  Jeffrey Stedfast  <fejj@novell.com>

	* Binding.cs: Added BindsDirectlyToSource property (not hooked up
	to anything).

	* BindingBase.cs: New source file.

2009-12-10  Chris Toshok  <toshok@ximian.com>

	* BindingExpressionBase.cs (ConvertToType): pass true for
	@doToStringConversion.

2009-12-02  Alan McGovern  <amcgovern@novell.com>

	* Binding.cs:
	* RelativeSource.cs:
	* BindingExpressionBase.cs: Implement support for
	  RelativeSource based bindings.

2009-12-02  Alan McGovern  <amcgovern@novell.com>

	* Binding.cs:
	* BindingExpressionBase.cs: Add provisional support for the
	  SL3 Binding.ElementName API.

2009-12-02  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: ContentPresenter copies its
	  Content to its DataContext whenever it isn't a UIElement,
	  therefore if we're databinding the Content property we need
	  to use the parent DataContext in order to get the correct
	  value.

2009-11-09  Chris Toshok  <toshok@ximian.com>

	* BindingExpression.cs: stub UpdateSource method.

	* Binding.cs: stub UpdateSourceTrigger property.

	r: rolf

2009-10-05  Jackson Harper  <jackson@ximian.com>

	* BindingExpression.cs: This is a public class in 3.0 (constructor
	is not though).

2009-09-29  Jackson Harper  <jackson@ximian.com>

	* BindingExpressionBase.cs: Implement indexed property paths. r: spouliot

2009-08-05  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: When a binding has been applied to
	  the DataContext property, we need to use the DataContext of
	  the parent element.

2009-07-29  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If a two way binding is attached
	  to TextBox.Text we should not update the source while the
	  textbox has focus.

2009-06-30  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: OneTime bindings can be
	  invalidated and they do reflect the new value.

2009-06-23  Alan McGovern  <amcgovern@novell.com>

	* Binding.cs: Don't null check value before using it, we
	  should throw a nullref if it's null.

2009-05-20  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: DataBinding and ManagedXamlLoader
	  use exactly the same type conversion as Styles and
	  ObjectKeyFrames - so merge both of them to use
	  MoonlightTypeConverter. This also fixes several
	  typeconversion related databinding issues.

2009-05-19  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Handle invalid values returned
	  from IValueConverters properly.

2009-05-15  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Properly handle exceptions when
	  updating the source in a 2 way binding. Raise the
	  BindingValidationError event in the right place.

2009-05-13  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If we have a property path like
	  "A.B.C" and the object 'B' is null, we should bail out with
	  failure.

2009-05-03  Chris Toshok  <toshok@ximian.com>

	* BindingExpressionBase.cs rename Updating/updating to
	UpdatingSource/updatingSource to better communicate what it means,
	and make a couple of properties internal instead of private (they
	weren't used anywhere else anyway.)
	(Dispose): make sure to unhook from the PropertyChanged event too
	so that we don't continue updating our target after we've been
	disposed.

	* BindingExpression.cs: remove all the commented out code.

2009-04-03  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Fix a few type converting issues
	  with two way bindings which are now revealed by the datagrid
	  tests.

2009-04-01  Alan McGovern  <amcgovern@novell.com>

	* BindingExpression.cs:
	* BindingExpressionBase.cs: TextBox only updates a two way
	  binding when it loses focus, so we need to hook into the
	  LostFocus event. Add an internal
	  BindingExpressionBase.Dispose method so that we can ensure
	  we detach from this event when the binding is removed.

2009-04-01  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If we're updating a two way
	  binding, don't invoke the setter if the old value is the
	  same as the new value.

2009-03-26  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If we can't convert the value to
	  the correct type, bail out without throwing an exception.

2009-03-26  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If the datasource in a two way
	  binding doesn't exist, just return immediately. Fixes
	  several datagrid issues.

2009-03-25  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Null check value before
	  referencing it. Allows a datagrid test to complete
	  successfully.

2009-03-25  Geoff Norton  <gnorton@novell.com>

	* Binding.cs: Bindings are 100% managed now, so we need some
	local managed members here to hold some of the values that
	used to live in native.

2009-03-24  Alan McGovern  <amcgovern@novell.com>

	* Binding.cs: Bindings cannot use PropertyPaths which are
	  instantiated with DependencyProperties, they must be
	  instantiated with a string.

2009-03-24  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: 1) When updating from an
	  INotifyPropertyChanged, mark the binding as 'Updating' so
	  that it doesn't get removed when calling
	  Target.SetValueImpl.
	2) If the target property doesn't exist (invalid binding or
	  source hasn't been set), then ignore the property changed
	  notification.

2009-02-26  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: Use Helper.DefaultCulture
	rather than declaring it here.

* BindingExpressionBase.cs: When updating from a two-way binding,
ensure we properly typeconvert from source type to dest type.

2009-03-13  Geoff Norton  <gnorton@novell.com>

	* Binding.cs: Ensure we ref, if we're going to unref

2009-02-26  Chris Toshok  <toshok@ximian.com>

	* BindingExpressionBase.cs (GetValue): mark this an override.

2009-02-26  Alan McGovern  <amcgovern@novell.com>

	* BindingExpressionBase.cs: If the property path is invalid,
	  we should bail out early and just return DP.DefaultValue.

2009-02-23  Jackson Harper  <jackson@ximian.com>

	* BindingExpressionBase.cs: If the user supplied ValueConverter
	doesn't work, try using our value converter.

2009-02-20  Jeffrey Stedfast  <fejj@novell.com>

	* Binding.cs: Throw ArgumentNullException if path is null.

2009-02-08  Chris Toshok  <toshok@ximian.com>

	* System.Windows.Data/BindingExpressionBase.cs: clean this up a
	bit, use the default value converter, rename Target <-> Source to
	match SL terminology, and remove a bunch of commented out code.
