private static void PreferenceGroupItemsSourceChanged(PreferenceGroup preference, AttachedMemberChangedEventArgs<IEnumerable> args)
 {
     var sourceGenerator = preference.GetBindingMemberValue(AttachedMembers.PreferenceGroup.ItemsSourceGenerator);
     if (sourceGenerator == null)
     {
         sourceGenerator = new PreferenceItemsSourceGenerator(preference);
         preference.SetBindingMemberValue(AttachedMembers.PreferenceGroup.ItemsSourceGenerator, sourceGenerator);
     }
     sourceGenerator.SetItemsSource(args.NewValue);
 }
        private static void PreferenceGroupItemsSourceChanged(PreferenceGroup preference, AttachedMemberChangedEventArgs <IEnumerable> args)
        {
            var sourceGenerator = preference.GetBindingMemberValue(AttachedMembers.PreferenceGroup.ItemsSourceGenerator);

            if (sourceGenerator == null)
            {
                sourceGenerator = new PreferenceItemsSourceGenerator(preference);
                preference.SetBindingMemberValue(AttachedMembers.PreferenceGroup.ItemsSourceGenerator, sourceGenerator);
            }
            sourceGenerator.SetItemsSource(args.NewValue);
        }
        private object SelectTemplate(int index)
        {
            var item     = GetItem(index);
            var selector = _preference.GetBindingMemberValue(AttachedMembers.PreferenceGroup.ItemTemplateSelector);

            if (selector != null)
            {
                var template = selector.SelectTemplate(item, _preference);
                template?.SetDataContext(item);
                item = template;
            }
            var preference = item as Preference;

            if (preference != null)
            {
                preference.SetBindingMemberValue(AttachedMembers.Object.Parent, _preference);
                preference.Order = index;
            }
            return(item);
        }