<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How can I add my own sorting logic?</title>
	<atom:link href="http://bea.stollnitz.com/blog/?feed=rss2&#038;p=24" rel="self" type="application/rss+xml" />
	<link>http://bea.stollnitz.com/blog/?p=24</link>
	<description>on Silverlight and WPF</description>
	<lastBuildDate>Mon, 02 Aug 2010 17:57:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Duncan Bayne</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-195931</link>
		<dc:creator>Duncan Bayne</dc:creator>
		<pubDate>Thu, 25 Mar 2010 23:56:02 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-195931</guid>
		<description>Bea,

Thanks for this &amp; other handy Silverlight posts - I have another addition to my morning tech-related-RSS addiction :-)</description>
		<content:encoded><![CDATA[<p>Bea,</p>
<p>Thanks for this &amp; other handy Silverlight posts &#8211; I have another addition to my morning tech-related-RSS addiction :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bea</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-170259</link>
		<dc:creator>Bea</dc:creator>
		<pubDate>Fri, 20 Nov 2009 20:46:21 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-170259</guid>
		<description>Brette,

If you wrap your source with a ListCollectionView, since IBindingList support IList, you should be able to sort it. In this case, sorting will not be delegated to the IBindingList - it will be performed the same way it would if the collection didn&#039;t implement IBindingList.

If the bug hasn&#039;t been fixed and implementing ITypedList didn&#039;t help, you may want to open a WPF bug on this issue. This will bump up the priority of the internal bug.

Bea</description>
		<content:encoded><![CDATA[<p>Brette,</p>
<p>If you wrap your source with a ListCollectionView, since IBindingList support IList, you should be able to sort it. In this case, sorting will not be delegated to the IBindingList &#8211; it will be performed the same way it would if the collection didn&#8217;t implement IBindingList.</p>
<p>If the bug hasn&#8217;t been fixed and implementing ITypedList didn&#8217;t help, you may want to open a WPF bug on this issue. This will bump up the priority of the internal bug.</p>
<p>Bea</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bea</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-170147</link>
		<dc:creator>Bea</dc:creator>
		<pubDate>Fri, 20 Nov 2009 01:55:04 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-170147</guid>
		<description>Hi Kenneth,

I&#039;m not sure that I understand your question. When you bind to an ObservableCollection, a collection view is created, and your UI ends up really binding to the view instead. Sorting happens at the view level only.

Not sure if this is what you mean, but if you select an item and then sort the collection, the item you selected earlier remains selected. To be clear, if you select item A in index 0, and then sort the collection so that item A is now in index 3, item A (in index 3) is selected. This is by design - WPF tracks items based on their actual identity and not based on index. 

Bea</description>
		<content:encoded><![CDATA[<p>Hi Kenneth,</p>
<p>I&#8217;m not sure that I understand your question. When you bind to an ObservableCollection, a collection view is created, and your UI ends up really binding to the view instead. Sorting happens at the view level only.</p>
<p>Not sure if this is what you mean, but if you select an item and then sort the collection, the item you selected earlier remains selected. To be clear, if you select item A in index 0, and then sort the collection so that item A is now in index 3, item A (in index 3) is selected. This is by design &#8211; WPF tracks items based on their actual identity and not based on index. </p>
<p>Bea</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bea</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-170135</link>
		<dc:creator>Bea</dc:creator>
		<pubDate>Thu, 19 Nov 2009 23:15:06 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-170135</guid>
		<description>Hi Domingos,

I have several thoughts related to the problem you describe:

- You mention that BindingListCollectionView doesn&#039;t support sorting, but that is not correct. IBindingList supports sorting by specifying a property name and a direction, and BindingListCollectionView delegates sorting to the underlying collection. However, it doesn&#039;t support custom sorting, which I&#039;m assuming is your scenario.

- You ask why ListCollectionView doesn&#039;t delegate AddNew to the underlying collection. ListCollectionView is optimized to work with collections that implement IList, not collections that implement IBindingList. BindingListCollectionView, as expected, delegates AddNew to the underlying IBindingList collection.

- The limitation of not being able to add a new item when the source has no default constructor is very well understood by the team. WPF 4.0 Beta 2 has a new feature that brings us a step closer to having a solution: the introduction of IEditableCollectionViewAddNewItem containing the AddNewItem method. You can read the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.componentmodel.ieditablecollectionviewaddnewitem(VS.100).aspx&quot; rel=&quot;nofollow&quot;&gt;MSDN documentation&lt;/a&gt; about this feature. The sample in MSDN shows how to use it when creating your own custom UI to add a new item (using a ListBox to display the data and a dialog box to enter the new item). From what I can tell, DataGrid doesn&#039;t yet use this method though (although it&#039;s a bit hard to be 100% sure because Reflector doesn&#039;t decompile 4.0 Beta 2 bits). 

- Your solution looks great.

Bea</description>
		<content:encoded><![CDATA[<p>Hi Domingos,</p>
<p>I have several thoughts related to the problem you describe:</p>
<p>- You mention that BindingListCollectionView doesn&#8217;t support sorting, but that is not correct. IBindingList supports sorting by specifying a property name and a direction, and BindingListCollectionView delegates sorting to the underlying collection. However, it doesn&#8217;t support custom sorting, which I&#8217;m assuming is your scenario.</p>
<p>- You ask why ListCollectionView doesn&#8217;t delegate AddNew to the underlying collection. ListCollectionView is optimized to work with collections that implement IList, not collections that implement IBindingList. BindingListCollectionView, as expected, delegates AddNew to the underlying IBindingList collection.</p>
<p>- The limitation of not being able to add a new item when the source has no default constructor is very well understood by the team. WPF 4.0 Beta 2 has a new feature that brings us a step closer to having a solution: the introduction of IEditableCollectionViewAddNewItem containing the AddNewItem method. You can read the <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ieditablecollectionviewaddnewitem(VS.100).aspx" rel="nofollow">MSDN documentation</a> about this feature. The sample in MSDN shows how to use it when creating your own custom UI to add a new item (using a ListBox to display the data and a dialog box to enter the new item). From what I can tell, DataGrid doesn&#8217;t yet use this method though (although it&#8217;s a bit hard to be 100% sure because Reflector doesn&#8217;t decompile 4.0 Beta 2 bits). </p>
<p>- Your solution looks great.</p>
<p>Bea</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bea</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-170117</link>
		<dc:creator>Bea</dc:creator>
		<pubDate>Thu, 19 Nov 2009 21:10:25 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-170117</guid>
		<description>Hi Dan,

There is nothing in WPF that makes that especially easy - you will need to write your own custom logic.
If you want to allow it to be cancelled, you may need to create a copy of the view and sort that instead. This way, if the user cancels, you still have the original order.

Bea</description>
		<content:encoded><![CDATA[<p>Hi Dan,</p>
<p>There is nothing in WPF that makes that especially easy &#8211; you will need to write your own custom logic.<br />
If you want to allow it to be cancelled, you may need to create a copy of the view and sort that instead. This way, if the user cancels, you still have the original order.</p>
<p>Bea</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: dan</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-170092</link>
		<dc:creator>dan</dc:creator>
		<pubDate>Thu, 19 Nov 2009 17:31:09 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-170092</guid>
		<description>Hi Bea,
Is there a simple way to force this custom sorting to happen on another thread and allow a sort to be cancelled mid way through?
Thanks
Daniel</description>
		<content:encoded><![CDATA[<p>Hi Bea,<br />
Is there a simple way to force this custom sorting to happen on another thread and allow a sort to be cancelled mid way through?<br />
Thanks<br />
Daniel</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Domingos</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-167260</link>
		<dc:creator>Domingos</dc:creator>
		<pubDate>Thu, 22 Oct 2009 03:04:09 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-167260</guid>
		<description>Bea,

This is my first comment on your blog! First, I would like to thank you for the very nice posts.

Now to views... I was really frustrated that the BindingList support in WPF was incomplete even in the latest beta (.NET 4). I have the following scenario: suppose I have business objects Mother and Child. There is no default constructor for Child, since each instance must be initialized with a Mother. Mother has a BindingList collection of its children.

Eventually I have Mother as the DataContext of some window and the child collection will be used as source in a CollectionViewSource which in turn is used as the ItemsSource of a DataGrid in that window.

The default behavior of WPF is to create a BindingListCollectionView for the children. However, this does not allow me to sort the items (and I don&#039;t want to write a tedious solution for sorting...). Forcing the view to be of type ListCollectionView does allow sorting, but now the &quot;AddNew&quot; functionality of the DataGrid, which relies on the view, does not work (because ListCollectionView does not know how to create a new instance of Child---it does not have a default constructor).

I came with a prototype solution as follows. The collection of children must inherit from BindingList and override the &quot;RemoveItem&quot; method so that it can raise the ListChanged event with a parameter of type DeleteListChangedEventArgs.
    public class DeleteListChangedEventArgs : ListChangedEventArgs
    {
        public DeleteListChangedEventArgs(object item) : base(ListChangedType.ItemDeleted, -1)
        {
            Item = item;
        }

        public object Item { get; set; }
    }

With this we have the actual deleted item on the notification of list changes of our BindingList.

Here is the code for my CollectionView implementation:

    class MyBindingListCollectionView : ListCollectionView, IEditableCollectionView
    {
        public IBindingList MySourceCollection { get; private set; }

        private bool SuspendNotification;

        public Type ItemType { get; private set; }

        public MyBindingListCollectionView(IBindingList list)
            : base(CopyBindingList(list))
        {
            ItemType = ItemTypeFromList(list);
            MySourceCollection = list;
            MySourceCollection.ListChanged += new ListChangedEventHandler(MySourceCollection_ListChanged);
        }

        protected static Type ItemTypeFromList(object source)
        {
            Type srcT = source.GetType().GetInterfaces().First(i =&gt; i.Name.StartsWith(&quot;IList&quot;));
            return srcT.GetGenericArguments().First();
        }

        /// 
        /// 
        /// Given a source that implements IList, construct an
        /// ObservableCollection with a copy of the source.
        /// 
        /// 
        protected static IList CopyBindingList(IBindingList source)
        {
            Type desT = typeof(ObservableCollection).MakeGenericType(ItemTypeFromList(source));
            IList lst = Activator.CreateInstance(desT) as IList;
            foreach (object o in source)
            {
                lst.Add(o);
            }
            return lst;
        }

        protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs args)
        {
            base.OnCollectionChanged(args);
            if (SuspendNotification) return; // ignore changes
            SuspendNotification = true;
            try
            {
                switch (args.Action)
                {
                    case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
                        foreach (object o in args.NewItems)
                        {
                            if (o.GetType().Equals(ItemType))
                            {
                                MySourceCollection.Add(o);
                            }
                        }
                        break;
                    case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:
                        foreach (object o in args.OldItems)
                        {
                            MySourceCollection.Remove(o);
                        }
                        break;
                    case System.Collections.Specialized.NotifyCollectionChangedAction.Reset:
                        // what do we do in this case?
                        break;
                }
            }
            finally
            {
                SuspendNotification = false;
            }
        }

        void MySourceCollection_ListChanged(object sender, ListChangedEventArgs e)
        {
            if (SuspendNotification) return; // ignore changes
            SuspendNotification = true;
            IList src = SourceCollection as IList;
            try
            {
                switch (e.ListChangedType)
                {
                    case ListChangedType.ItemAdded:
                        src.Add(MySourceCollection[e.NewIndex]);
                        break;
                    case ListChangedType.ItemDeleted:
                        DeleteListChangedEventArgs ex = e as DeleteListChangedEventArgs;
                        if (ex != null)
                        {
                            src.Remove(ex.Item);
                        }
                        break;
                    case ListChangedType.Reset:
                        src.Clear();
                        foreach (object o in MySourceCollection)
                        {
                            src.Add(o);
                        }
                        break;
                }
            }
            finally
            {
                SuspendNotification = false;
            }
        }

        object m_New = null;
        object IEditableCollectionView.AddNew()
        {
            m_New = MySourceCollection.AddNew();
            return m_New;
        }

        bool IEditableCollectionView.CanAddNew
        {
            get { return CurrentAddItem == null &amp;&amp; CurrentEditItem == null; }
        }

        object IEditableCollectionView.CurrentAddItem
        {
            get { return m_New; }
        }

        bool IEditableCollectionView.IsAddingNew
        {
            get { return m_New != null; }
        }

        void IEditableCollectionView.CancelNew()
        {
            MySourceCollection.Remove(m_New);
            m_New = null;
        }

        void IEditableCollectionView.CommitNew()
        {
            m_New = null;
        }
    }

As you may have noted, I tried to implement only the methods of IEditableCollectionView that are strictly necessary for the AddNew functionality. Since I am forwarding the &quot;AddNew&quot; to the BindingList, objects of type Child are created when necessary. I tested (very briefly) this code with a DataGrid and I didn&#039;t have any problems.

It surely isn&#039;t a very elegant solution, but it is a lot less work than to build a CollectionView from nothing. My question is: why didn&#039;t the designers of ListCollectionView used the IBindingList contract to provide AddNew functionality when the SourceCollection implements it?

Thanks,

Domingos.</description>
		<content:encoded><![CDATA[<p>Bea,</p>
<p>This is my first comment on your blog! First, I would like to thank you for the very nice posts.</p>
<p>Now to views&#8230; I was really frustrated that the BindingList support in WPF was incomplete even in the latest beta (.NET 4). I have the following scenario: suppose I have business objects Mother and Child. There is no default constructor for Child, since each instance must be initialized with a Mother. Mother has a BindingList collection of its children.</p>
<p>Eventually I have Mother as the DataContext of some window and the child collection will be used as source in a CollectionViewSource which in turn is used as the ItemsSource of a DataGrid in that window.</p>
<p>The default behavior of WPF is to create a BindingListCollectionView for the children. However, this does not allow me to sort the items (and I don&#8217;t want to write a tedious solution for sorting&#8230;). Forcing the view to be of type ListCollectionView does allow sorting, but now the &#8220;AddNew&#8221; functionality of the DataGrid, which relies on the view, does not work (because ListCollectionView does not know how to create a new instance of Child&#8212;it does not have a default constructor).</p>
<p>I came with a prototype solution as follows. The collection of children must inherit from BindingList and override the &#8220;RemoveItem&#8221; method so that it can raise the ListChanged event with a parameter of type DeleteListChangedEventArgs.<br />
    public class DeleteListChangedEventArgs : ListChangedEventArgs<br />
    {<br />
        public DeleteListChangedEventArgs(object item) : base(ListChangedType.ItemDeleted, -1)<br />
        {<br />
            Item = item;<br />
        }</p>
<p>        public object Item { get; set; }<br />
    }</p>
<p>With this we have the actual deleted item on the notification of list changes of our BindingList.</p>
<p>Here is the code for my CollectionView implementation:</p>
<p>    class MyBindingListCollectionView : ListCollectionView, IEditableCollectionView<br />
    {<br />
        public IBindingList MySourceCollection { get; private set; }</p>
<p>        private bool SuspendNotification;</p>
<p>        public Type ItemType { get; private set; }</p>
<p>        public MyBindingListCollectionView(IBindingList list)<br />
            : base(CopyBindingList(list))<br />
        {<br />
            ItemType = ItemTypeFromList(list);<br />
            MySourceCollection = list;<br />
            MySourceCollection.ListChanged += new ListChangedEventHandler(MySourceCollection_ListChanged);<br />
        }</p>
<p>        protected static Type ItemTypeFromList(object source)<br />
        {<br />
            Type srcT = source.GetType().GetInterfaces().First(i =&gt; i.Name.StartsWith(&#8220;IList&#8221;));<br />
            return srcT.GetGenericArguments().First();<br />
        }</p>
<p>        ///<br />
        ///<br />
        /// Given a source that implements IList, construct an<br />
        /// ObservableCollection with a copy of the source.<br />
        ///<br />
        ///<br />
        protected static IList CopyBindingList(IBindingList source)<br />
        {<br />
            Type desT = typeof(ObservableCollection).MakeGenericType(ItemTypeFromList(source));<br />
            IList lst = Activator.CreateInstance(desT) as IList;<br />
            foreach (object o in source)<br />
            {<br />
                lst.Add(o);<br />
            }<br />
            return lst;<br />
        }</p>
<p>        protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs args)<br />
        {<br />
            base.OnCollectionChanged(args);<br />
            if (SuspendNotification) return; // ignore changes<br />
            SuspendNotification = true;<br />
            try<br />
            {<br />
                switch (args.Action)<br />
                {<br />
                    case System.Collections.Specialized.NotifyCollectionChangedAction.Add:<br />
                        foreach (object o in args.NewItems)<br />
                        {<br />
                            if (o.GetType().Equals(ItemType))<br />
                            {<br />
                                MySourceCollection.Add(o);<br />
                            }<br />
                        }<br />
                        break;<br />
                    case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:<br />
                        foreach (object o in args.OldItems)<br />
                        {<br />
                            MySourceCollection.Remove(o);<br />
                        }<br />
                        break;<br />
                    case System.Collections.Specialized.NotifyCollectionChangedAction.Reset:<br />
                        // what do we do in this case?<br />
                        break;<br />
                }<br />
            }<br />
            finally<br />
            {<br />
                SuspendNotification = false;<br />
            }<br />
        }</p>
<p>        void MySourceCollection_ListChanged(object sender, ListChangedEventArgs e)<br />
        {<br />
            if (SuspendNotification) return; // ignore changes<br />
            SuspendNotification = true;<br />
            IList src = SourceCollection as IList;<br />
            try<br />
            {<br />
                switch (e.ListChangedType)<br />
                {<br />
                    case ListChangedType.ItemAdded:<br />
                        src.Add(MySourceCollection[e.NewIndex]);<br />
                        break;<br />
                    case ListChangedType.ItemDeleted:<br />
                        DeleteListChangedEventArgs ex = e as DeleteListChangedEventArgs;<br />
                        if (ex != null)<br />
                        {<br />
                            src.Remove(ex.Item);<br />
                        }<br />
                        break;<br />
                    case ListChangedType.Reset:<br />
                        src.Clear();<br />
                        foreach (object o in MySourceCollection)<br />
                        {<br />
                            src.Add(o);<br />
                        }<br />
                        break;<br />
                }<br />
            }<br />
            finally<br />
            {<br />
                SuspendNotification = false;<br />
            }<br />
        }</p>
<p>        object m_New = null;<br />
        object IEditableCollectionView.AddNew()<br />
        {<br />
            m_New = MySourceCollection.AddNew();<br />
            return m_New;<br />
        }</p>
<p>        bool IEditableCollectionView.CanAddNew<br />
        {<br />
            get { return CurrentAddItem == null &amp;&amp; CurrentEditItem == null; }<br />
        }</p>
<p>        object IEditableCollectionView.CurrentAddItem<br />
        {<br />
            get { return m_New; }<br />
        }</p>
<p>        bool IEditableCollectionView.IsAddingNew<br />
        {<br />
            get { return m_New != null; }<br />
        }</p>
<p>        void IEditableCollectionView.CancelNew()<br />
        {<br />
            MySourceCollection.Remove(m_New);<br />
            m_New = null;<br />
        }</p>
<p>        void IEditableCollectionView.CommitNew()<br />
        {<br />
            m_New = null;<br />
        }<br />
    }</p>
<p>As you may have noted, I tried to implement only the methods of IEditableCollectionView that are strictly necessary for the AddNew functionality. Since I am forwarding the &#8220;AddNew&#8221; to the BindingList, objects of type Child are created when necessary. I tested (very briefly) this code with a DataGrid and I didn&#8217;t have any problems.</p>
<p>It surely isn&#8217;t a very elegant solution, but it is a lot less work than to build a CollectionView from nothing. My question is: why didn&#8217;t the designers of ListCollectionView used the IBindingList contract to provide AddNew functionality when the SourceCollection implements it?</p>
<p>Thanks,</p>
<p>Domingos.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bea</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-166488</link>
		<dc:creator>Bea</dc:creator>
		<pubDate>Mon, 12 Oct 2009 02:23:38 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-166488</guid>
		<description>Hi Steve,

You can do that with custom sorting, as I show in this post. An even easier way of doing that would be to simply add several sort descriptions to the view. You could even do that all in XAML, by using a CollectionViewSource.

Thanks,
Bea</description>
		<content:encoded><![CDATA[<p>Hi Steve,</p>
<p>You can do that with custom sorting, as I show in this post. An even easier way of doing that would be to simply add several sort descriptions to the view. You could even do that all in XAML, by using a CollectionViewSource.</p>
<p>Thanks,<br />
Bea</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kenneth Haugland</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-165159</link>
		<dc:creator>Kenneth Haugland</dc:creator>
		<pubDate>Sat, 26 Sep 2009 23:07:09 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-165159</guid>
		<description>Hi Bea

I know this is an old thread but, im facing a problem with the CollectionView.... It goes as follows:

I have an ObservableCollection(of MyClass) and I use the example from the MSDN Library to do the column sorting....

The problem Im having is that after I sort the Collection View the original index is lost at the CollectionView to the ObservableCollection. It messes up the whole code... Is there a way of binding the ObservableCollection and the CollectionView?

Kenneth</description>
		<content:encoded><![CDATA[<p>Hi Bea</p>
<p>I know this is an old thread but, im facing a problem with the CollectionView&#8230;. It goes as follows:</p>
<p>I have an ObservableCollection(of MyClass) and I use the example from the MSDN Library to do the column sorting&#8230;.</p>
<p>The problem Im having is that after I sort the Collection View the original index is lost at the CollectionView to the ObservableCollection. It messes up the whole code&#8230; Is there a way of binding the ObservableCollection and the CollectionView?</p>
<p>Kenneth</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: steve</title>
		<link>http://bea.stollnitz.com/blog/?p=24&#038;cpage=1#comment-162564</link>
		<dc:creator>steve</dc:creator>
		<pubDate>Mon, 07 Sep 2009 03:17:34 +0000</pubDate>
		<guid isPermaLink="false">http://bea.stollnitz.com/blog/?p=24#comment-162564</guid>
		<description>How about a sample project for download on multisorting on a listview</description>
		<content:encoded><![CDATA[<p>How about a sample project for download on multisorting on a listview</p>
]]></content:encoded>
	</item>
</channel>
</rss>
