static void OnItemsSourceChanged(Control sender, AttachedPropertyChangedEventArgs<IEnumerable> e) { IItemsSourceFeature feature = sender.GetItemsSourceFeature(); if(feature != null) { IEnumerable dataSource = (e.NewValue is INotifyCollectionChanged && e.NewValue is IList) ? BindingListAdapter.CreateFromList((IList)e.NewValue) : e.NewValue;//TODO feature.SetDataSource(sender, dataSource.With(x => new BindingSource() { DataSource = dataSource })); } }
static IEnumerable<AttachedPropertyBase> GetAttachedProperties(Control control) { yield return DataContextProvider.DataContextProperty; yield return CommandProvider.CommandProperty; yield return CommandProvider.CommandParameterProperty; if(control.GetItemsSourceFeature() != null) { yield return ItemsSourceProvider.ItemsSourceProperty; yield return ItemsSourceProvider.SelectedItemProperty; } }
internal static bool CanSerializeProperty(Control control, PropertyDescriptor property) { IItemsSourceFeature feature = control.GetItemsSourceFeature(); if(feature != null) { if(control.GetItemsSource() == null) return true; return !feature.GetItemsSourceAffectedProperties().Any(x => (x == property.Name)); } return true; }
static void OnSelectedItemChanged(Control sender, AttachedPropertyChangedEventArgs<object> e) { IItemsSourceFeature feature = sender.GetItemsSourceFeature(); if(feature != null) { Action<Control> selectionChangedHandler = sender.GetValue(HandlerProperty); if(selectionChangedHandler == null) { selectionChangedHandler = OnSelectionChanged; sender.SetValue(HandlerProperty, selectionChangedHandler); feature.AddSelectionChangedCallback(sender, selectionChangedHandler); } feature.SetSelectedItem(sender, e.NewValue); sender.SetSelectedItem(feature.GetSelectedItem(sender)); //TODO test recursion or add assert } }
static void OnSelectionChanged(Control sender) { IItemsSourceFeature feature = sender.GetItemsSourceFeature(); sender.SetSelectedItem(feature.GetSelectedItem(sender)); //TODO test recursion or add assert }