void OnFilterCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
HasFilter = Filters.Count > 0;
InvalidateProperty(SelectedFilterProperty);
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach (var item in e.NewItems.OfType<GalleryGroupFilter>())
{
if (groupsMenuButton != null)
{
GalleryGroupFilter filter = item;
MenuItem menuItem = new MenuItem();
menuItem.Header = filter.Title;
menuItem.Tag = filter;
menuItem.IsDefinitive = false;
if (filter == SelectedFilter) menuItem.IsChecked = true;
menuItem.Click += OnFilterMenuItemClick;
groupsMenuButton.Items.Add(menuItem);
}
}
break;
case NotifyCollectionChangedAction.Remove:
foreach (var item in e.OldItems.OfType<GalleryGroupFilter>())
{
if (groupsMenuButton != null)
{
groupsMenuButton.Items.Remove(GetFilterMenuItem(item));
}
}
break;
case NotifyCollectionChangedAction.Replace:
foreach (var item in e.OldItems.OfType<GalleryGroupFilter>())
{
if (groupsMenuButton != null)
{
groupsMenuButton.Items.Remove(GetFilterMenuItem(item));
}
}
foreach (var item in e.NewItems.OfType<GalleryGroupFilter>())
{
if (groupsMenuButton != null)
{
GalleryGroupFilter filter = item;
MenuItem menuItem = new MenuItem();
menuItem.Header = filter.Title;
menuItem.Tag = filter;
menuItem.IsDefinitive = false;
if (filter == SelectedFilter) menuItem.IsChecked = true;
menuItem.Click += OnFilterMenuItemClick;
groupsMenuButton.Items.Add(menuItem);
}
}
break;
case NotifyCollectionChangedAction.Reset:
if (groupsMenuButton != null)
{
groupsMenuButton.Items.Clear();
}
break;
}
}