This question is a result of the fix to this problem. After getting the sort behavior to properly sort the ObservableCollection
, I now notice that the first time the collection is added to, the CustomSorter
handler fires with only the first item in it, and that same item is passed in as both parameters to the method. That is producing a duplicate item in the list.
Here are the pertinent parts of the view model code:
public ObservableCollection<PermissionItemViewModel> PermissionItems { get; private set; }
private void FetchRoleData()
{
PermissionItems.Clear();
if (SelectedRole != null)
{
using (var context = new myDataContext(new myDbFactory().GetConnectionString()))
{
foreach (PermissionsEnum permission in Enum.GetValues(typeof(PermissionsEnum)))
PermissionItems.Add(new PermissionItemViewModel(permission, SelectedRole[permission]));
}
}
}
All subsequent manipulations of that collection do not do this...it only happens the first time through the FetchRoleData
method. Why?
EDIT:
Some additional information. The CustomSort
property is set when the CollectionViewSource
fires its Filter
event (the only event it has AFAIK). I couldn't come up with any better trigger to get it set. The OnAttached
override is too soon, as the View
member of the CollectionViewSource
is not set yet by that point. Catch 22, I guess. That is happening immediately after that first collection item is added. If this is due to the order in which things are being set, then are there any recommendations for a change?