public void CreateNotifiableMemberGenericTest() { string value = null; var source = new BindingSourceModel(); const string path = "path"; Type type = typeof(string); var property = AttachedBindingMember.CreateNotifiableMember <BindingSourceModel, string>(path, (info, o) => value, (info, o, v) => { value = v; return(true); }, member: BindingSourceModel.IntPropertyInfo); property.Path.ShouldEqual(path); property.Type.ShouldEqual(type); property.CanRead.ShouldBeTrue(); property.CanWrite.ShouldBeTrue(); property.MemberType.ShouldEqual(BindingMemberType.Attached); property.Member.ShouldEqual(BindingSourceModel.IntPropertyInfo); property.GetValue(source, null).ShouldBeNull(); property.SetValue(source, new object[] { path }); property.GetValue(source, null).ShouldEqual(path); value.ShouldEqual(path); }
public static void RegisterStringElementMembers() { BindingBuilderExtensions.RegisterDefaultBindingMember <StringElement>(nameof(StringElement.Value)); MemberProvider.Register(AttachedBindingMember.CreateMember <StringElement, string>(nameof(StringElement.Value), (info, element) => element.Value, (info, element, arg3) => { element.Value = arg3; element.Reload(); })); MemberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.StringElement.TappedEvent, (info, element, arg3) => { var weakWrapper = arg3.ToWeakWrapper(); IDisposable unsubscriber = null; Action action = () => { if (!weakWrapper.EventListener.TryHandle(weakWrapper.EventListener, EventArgs.Empty)) { unsubscriber.Dispose(); } }; unsubscriber = WeakActionToken.Create(element, action, (stringElement, nsAction) => stringElement.Tapped -= nsAction); element.Tapped += action; return(unsubscriber); })); }
public static void RegisterCollectionViewCellMembers() { BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateMember <UICollectionViewCell, bool?>(nameof(UICollectionViewCell.Selected), (info, target) => CollectionViewSourceBase.CellMediator.GetMediator(target, true).SelectedBind, (info, cell, arg3) => CollectionViewSourceBase.CellMediator.GetMediator(cell, true).SelectedBind = arg3, (info, cell, arg3) => CollectionViewSourceBase.CellMediator.GetMediator(cell, true).AddWithUnsubscriber(arg3))); }
public static void RegisterSegmentedControlMembers() { BindingBuilderExtensions.RegisterDefaultBindingMember <UISegmentedControl>(nameof(UISegmentedControl.SelectedSegment)); MemberProvider.Register(AttachedBindingMember.CreateMember <UISegmentedControl, int>(nameof(UISegmentedControl.SelectedSegment), (info, control) => (int)control.SelectedSegment, (info, control, arg3) => control.SelectedSegment = arg3, nameof(UISegmentedControl.ValueChanged))); }
public static void RegisterSplitViewControllerMembers() { MemberProvider.Register(AttachedBindingMember.CreateNotifiableMember(AttachedMembers.UISplitViewController.MasterView, (info, controller) => { if (controller.ViewControllers.Length == 2) { return(controller.ViewControllers[0]); } return(null); }, (info, controller, arg3) => { UpdateMasterDetailController(controller, arg3, true); return(true); })); MemberProvider.Register(AttachedBindingMember.CreateNotifiableMember(AttachedMembers.UISplitViewController.DetailView, (info, controller) => { if (controller.ViewControllers.Length == 2) { return(controller.ViewControllers[1]); } return(null); }, (info, controller, arg3) => { UpdateMasterDetailController(controller, arg3, false); return(true); })); }
public static void RegisterToolbarMembers() { //Toolbar MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.View.MenuTemplate.Override <Toolbar>(), ToolbarMenuTemplateChanged)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembersCompat.Toolbar.IsActionBar, ToolbarIsActionBarChanged)); }
protected override void OnInit() { BindingServiceProvider.SetDefaultValues(); BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateMember <object, object>(AttachedMemberConstants.AsErrorsSource, (info, o) => BindingConstants.ErrorsSourceValue, null)); BindingServiceProvider.ValueConverter = BindingConverterExtensions.Convert; base.OnInit(); if (ValueConverterEx == null) { //to invoke static constructor. #if NETFX_CORE new UwpDataBindingModule(); #else new WpfDataBindingModule(); #endif ValueConverterEx = BindingServiceProvider.ValueConverter; } else { BindingServiceProvider.ValueConverter = ValueConverterEx; } ThreadManager.ImmediateInvokeAsync = true; ThreadManager.ImmediateInvokeOnUiThreadAsync = true; ThreadManager.ImmediateInvokeOnUiThread = true; }
static BindingExtensions() { EmptyListener = new WeakEventListener(); AttachedParentMember = AttachedBindingMember.CreateAutoProperty <object, object>("#" + AttachedMemberConstants.Parent); NullValue = new object[] { null }; MergePathDelegate = MergePath; }
private static void RegisterMembers(IBindingMemberProvider memberProvider) { #if !APPCOMPAT //View memberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.ViewGroup.AddToBackStack)); #endif }
private static void RegisterCollectionViewMembers(IBindingMemberProvider memberProvider) { BindingServiceProvider.ResourceResolver.AddType("UICollectionViewScrollPosition", typeof(UICollectionViewScrollPosition)); BindingServiceProvider.ResourceResolver.AddType("UICollectionViewScrollDirection", typeof(UICollectionViewScrollDirection)); BindingServiceProvider.BindingMemberPriorities[CollectionViewUseAnimationsMember.Path] = 1; BindingServiceProvider.BindingMemberPriorities[CollectionViewScrollPositionMember.Path] = 1; //UICollectionView memberProvider.Register(CollectionViewUseAnimationsMember); memberProvider.Register(CollectionViewScrollPositionMember); memberProvider.Register(CollectionViewSelectedItemChangedEvent); memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UICollectionView, IEnumerable>(AttachedMemberConstants.ItemsSource, CollectionViewItemsSourceChanged)); memberProvider.Register(AttachedBindingMember.CreateMember <UICollectionView, object>(AttachedMemberConstants.SelectedItem, GetCollectionViewSelectedItem, SetCollectionViewSelectedItem, (info, view, arg3) => (IDisposable)CollectionViewSelectedItemChangedEvent.SetValue(view, arg3))); memberProvider.Register(AttachedBindingMember.CreateAutoProperty <UICollectionView, ICollectionCellTemplateSelector>( AttachedMemberConstants.ItemTemplate, (view, args) => { if (args.NewValue != null) { args.NewValue.Initialize(view); } })); //UICollectionViewCell memberProvider.Register(CollectionViewCellSelectedMember); memberProvider.Register(CollectionViewCellHighlightedMember); memberProvider.Register(CollectionViewCellShouldHighlightMember); memberProvider.Register(CollectionViewCellShouldDeselectMember); memberProvider.Register(CollectionViewCellShouldSelectMember); }
static PlatformDataBindingModule() { AddViewValue = new object(); RemoveViewValue = new object[] { null }; //Menu MenuItemsSourceMember = AttachedBindingMember.CreateAutoProperty <IMenu, IEnumerable>(AttachedMemberConstants.ItemsSource, MenuItemsSourceChanged); IsCheckedMenuItemMember = AttachedBindingMember.CreateNotifiableMember <IMenuItem, bool>("IsChecked", (info, item) => item.IsChecked, (info, item, value) => { if (value == item.IsChecked) { return(false); } item.SetChecked(value); return(true); }); #if !API8 MenuItemActionViewMember = AttachedBindingMember .CreateNotifiableMember <IMenuItem, object>("ActionView", (info, item) => item.GetActionView(), MenuItemUpdateActionView); MenuItemActionViewSelectorMember = AttachedBindingMember .CreateAutoProperty <IMenuItem, IDataTemplateSelector>("ActionViewTemplateSelector", (o, args) => RefreshValue(o, MenuItemActionViewMember)); MenuItemActionProviderMember = AttachedBindingMember .CreateNotifiableMember <IMenuItem, object>("ActionProvider", (info, item) => item.GetActionProvider(), MenuItemUpdateActionProvider); MenuItemActionProviderSelectorMember = AttachedBindingMember .CreateAutoProperty <IMenuItem, IDataTemplateSelector>("ActionProviderTemplateSelector", (o, args) => RefreshValue(o, MenuItemActionProviderMember)); AddToBackStackMember = AttachedBindingMember.CreateAutoProperty <ViewGroup, bool>("AddToBackStack"); #endif //ViewGroup ContentMember = AttachedBindingMember .CreateAutoProperty <ViewGroup, object>(AttachedMemberConstants.Content, ContentMemberChanged, ContentMemberAttached); ContentTemplateIdMember = AttachedBindingMember .CreateAutoProperty <ViewGroup, int?>(AttachedMemberConstants.ContentTemplate, ContentTemplateIdChanged); ContentTemplateSelectorMember = AttachedBindingMember .CreateAutoProperty <ViewGroup, IDataTemplateSelector>(AttachedMemberConstants.ContentTemplateSelector, ContentTemplateSelectorChanged); //AdapterView AdapterViewSelectedPositionMember = AttachedBindingMember.CreateAutoProperty <AdapterView, int>("SelectedItemPosition", AdapterViewSelectedItemPositionChanged, AdapterViewSelectedMemberAttached, (view, info) => view.SelectedItemPosition); AdapterViewSelectedItemMember = AttachedBindingMember.CreateAutoProperty <AdapterView, object>( AttachedMemberConstants.SelectedItem, AdapterViewSelectedItemChanged); ScrollToSelectedItemMember = AttachedBindingMember.CreateAutoProperty <AdapterView, bool>("ScrollToSelectedItem"); //TabHost TabHostSelectedItemMember = AttachedBindingMember.CreateAutoProperty <TabHost, object>(AttachedMemberConstants.SelectedItem, TabHostSelectedItemChanged); #if !API8 //Action bar ActionBarItemsSourceMember = AttachedBindingMember.CreateAutoProperty <ActionBar, IEnumerable>(AttachedMemberConstants.ItemsSource, (bar, args) => ActionBarUpdateItemsSource(bar)); ActionBarSelectedItemMember = AttachedBindingMember.CreateAutoProperty <ActionBar, object>(AttachedMemberConstants.SelectedItem, ActionBarSelectedItemChanged); //Context action bar ActionBarContextActionBarTemplateMember = AttachedBindingMember.CreateAutoProperty <ActionBar, int?>("ContextActionBarTemplate"); ActionBarContextActionBarVisibleMember = AttachedBindingMember.CreateAutoProperty <ActionBar, bool>("ContextActionBarVisible", ActionBarContextActionBarVisibleChanged); //ActioBar.Tab ActionBarTabContentMember = AttachedBindingMember.CreateAutoProperty <ActionBar.Tab, object>(AttachedMemberConstants.Content); #endif }
public void CreateEventMemberAttachTest() { bool isInvoked = false; var source = new BindingSourceModel(); IEventListener listener = new EventListenerMock(); const string path = "path"; var property = AttachedBindingMember.CreateEvent(path, (info, o, arg3) => null, (model, args) => { model.ShouldEqual(source); args.ShouldNotBeNull(); isInvoked = true; }); property.SetValue(source, new object[] { listener }); isInvoked.ShouldBeTrue(); isInvoked = false; property.SetValue(source, new object[] { null }); isInvoked.ShouldBeFalse(); source = new BindingSourceModel(); property.SetValue(source, new object[] { listener }); isInvoked.ShouldBeTrue(); }
public void CreateNotifiableMemberGenericObserveTest() { bool isInvoked = false; bool raiseEvent = true; var listenerMock = new EventListenerMock { Handle = (o, o1) => isInvoked = true }; var source = new BindingSourceModel(); const string path = "path"; var property = AttachedBindingMember.CreateNotifiableMember <BindingSourceModel, string>(path, (info, o) => null, (info, o, v) => raiseEvent); IDisposable subscriber = property.TryObserve(source, listenerMock); property.SetValue(source, new object[] { path }); isInvoked.ShouldBeTrue(); subscriber.ShouldNotBeNull(); raiseEvent = false; isInvoked = false; property.SetValue(source, new object[] { path }); isInvoked.ShouldBeFalse(); raiseEvent = true; isInvoked = false; property.SetValue(source, new object[] { null }); isInvoked.ShouldBeTrue(); subscriber.Dispose(); isInvoked = false; property.SetValue(source, new object[] { path }); isInvoked.ShouldBeFalse(); }
public void CreateNotifiableMemberGenericSetterTest() { object value = null; var source = new BindingSourceModel(); const string path = "path"; Type type = typeof(string); var property = AttachedBindingMember.CreateNotifiableMember <BindingSourceModel, string>(path, null, (info, o, v) => { info.ShouldNotBeNull(); o.ShouldEqual(source); v.ShouldEqual(path); value = v; return(true); }); property.Path.ShouldEqual(path); property.Type.ShouldEqual(type); property.CanRead.ShouldBeFalse(); property.CanWrite.ShouldBeTrue(); property.MemberType.ShouldEqual(BindingMemberType.Attached); property.SetValue(source, new object[] { path }); value.ShouldEqual(path); ShouldThrow(() => property.GetValue(source, null)); }
public static void RegisterControlMembers() { var sizeChanged = MemberProvider.GetBindingMember(typeof(Control), nameof(Control.SizeChanged), true, false); if (sizeChanged != null) { MemberProvider.Register(typeof(Control), "WidthChanged", sizeChanged, true); MemberProvider.Register(typeof(Control), "HeightChanged", sizeChanged, true); } MemberProvider.Register(AttachedBindingMember .CreateMember <Control, object>(AttachedMemberConstants.FindByNameMethod, FindByNameControlMember)); MemberProvider.Register(AttachedBindingMember .CreateMember <Control, bool>(AttachedMemberConstants.Focused, (info, control) => control.Focused, (info, control, arg3) => { if (arg3) { control.Focus(); } }, nameof(Control.LostFocus))); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.Control.Content, ContentChanged)); var contenMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.Control.ContentTemplateSelector, ContentTemplateChanged); MemberProvider.Register(contenMember); MemberProvider.Register(typeof(Control), AttachedMemberConstants.ContentTemplate, contenMember, true); }
private static void RegisterViewMembers(IBindingMemberProvider memberProvider) { //View memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, int>(AttachedMemberNames.MenuTemplate)); #if !API8 memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, int>(AttachedMemberNames.PopupMenuTemplate)); memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, string>(AttachedMemberNames.PopupMenuEvent, PopupMenuEventChanged)); memberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, string>(AttachedMemberNames.PlacementTargetPath)); #endif memberProvider.Register(AttachedBindingMember.CreateMember <View, object>(AttachedMemberConstants.Parent, GetViewParentValue, null, ObserveViewParent)); memberProvider.Register(AttachedBindingMember.CreateMember <View, object>(AttachedMemberConstants.FindByNameMethod, ViewFindByNameMember)); memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>(AttachedMemberConstants.Focused, (info, view) => view.IsFocused, null, "FocusChange")); memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>(AttachedMemberConstants.Enabled, (info, view) => view.Enabled, (info, view, value) => view.Enabled = value)); memberProvider.Register(AttachedBindingMember.CreateMember <View, ViewStates>("Visibility", (info, view) => view.Visibility, (info, view, value) => view.Visibility = value, ObserveViewVisibility)); memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>("Visible", (info, view) => view.Visibility == ViewStates.Visible, (info, view, value) => view.Visibility = value ? ViewStates.Visible : ViewStates.Gone, ObserveViewVisibility)); memberProvider.Register(AttachedBindingMember.CreateMember <View, bool>("Hidden", (info, view) => view.Visibility != ViewStates.Visible, (info, view, value) => view.Visibility = value ? ViewStates.Gone : ViewStates.Visible, ObserveViewVisibility)); }
public static void RegisterDataGridViewMembers() { BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.Object.ItemsSource.Override <DataGridView>()); MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.Object.ItemsSource.Override <DataGridView>(), (info, view) => view.DataSource as IEnumerable, (info, view, value) => { view.DataSource = value; view.Refresh(); }, nameof(DataGridView.DataSourceChanged))); MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.DataGridView.SelectedItem, GetSelectedItemDataGridView, SetSelectedItemDataGridView, (info, view, arg3) => { arg3 = arg3.ToWeakEventListener(); EventHandler handler = null; handler = (sender, args) => { var gridView = (DataGridView)sender; Action <DataGridView, IEventListener, EventHandler> action = (dataGridView, listener, eventHandler) => { if (!listener.TryHandle(dataGridView, EventArgs.Empty)) { dataGridView.CurrentCellChanged -= eventHandler; } }; //To prevent this exception 'Operation not valid because it results in a reentrant call to the SetCurrentCellAddressCore function' gridView.BeginInvoke(action, gridView, arg3, handler); }; view.CurrentCellChanged += handler; return(WeakActionToken.Create(view, handler, (gridView, eventHandler) => gridView.CurrentCellChanged -= eventHandler)); })); }
static AttachedMembersRegistration() { DebbugerAttached = Debugger.IsAttached; ExplicitParentTypes = new HashSet <Type>(); CommandParameterInternal = AttachedBindingMember.CreateAutoProperty <object, object>("~#@cmdparam"); AttachedParentMember = AttachedBindingMember.CreateAutoProperty <object, ParentValue>("#" + AttachedMemberConstants.Parent); }
public void BindingTargetShouldUseDelegateIsEnabledProperty() { bool isEnabled = false; IAttachedBindingMemberInfo <object, bool> member = AttachedBindingMember.CreateMember <object, bool>(AttachedMemberConstants.Enabled, (info, o) => isEnabled, (info, o, v) => isEnabled = v); var memberProvider = new BindingMemberProvider(); memberProvider.Register(typeof(object), member, false); BindingServiceProvider.MemberProvider = memberProvider; var mock = new ObserverMock { PathMembers = new BindingPathMembersMock(new object(), BindingPath.Empty) }; var bindingTarget = (BindingTarget)CreateBindingSource(mock); bindingTarget.IsEnabled.ShouldBeFalse(); bindingTarget.IsEnabled = true; isEnabled.ShouldBeTrue(); bindingTarget.IsEnabled.ShouldBeTrue(); bindingTarget.IsEnabled = false; isEnabled.ShouldBeFalse(); bindingTarget.IsEnabled.ShouldBeFalse(); }
public static void RegisterVisualElementMembers() { var visibleMember = MemberProvider.GetBindingMember(typeof(VisualElement), nameof(VisualElement.IsVisible), true, false); if (visibleMember != null) { MemberProvider.Register(typeof(VisualElement), AttachedMembers.VisualElement.Visible, visibleMember, true); MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.VisualElement.Hidden, (info, element) => !element.IsVisible, (info, element, arg3) => element.IsVisible = !arg3, (info, element, arg3) => visibleMember.TryObserve(element, arg3))); } MemberProvider.Register(AttachedBindingMember .CreateMember <VisualElement, object>(AttachedMemberConstants.FindByNameMethod, FindByNameMemberImpl)); MemberProvider.Register(AttachedBindingMember.CreateMember <VisualElement, bool>(AttachedMemberConstants.Focused, (info, element) => element.IsFocused, (info, element, arg3) => { if (arg3) { element.Focus(); } else { element.Unfocus(); } }, (info, element, arg3) => BindingServiceProvider.WeakEventManager.Subscribe(element, nameof(VisualElement.IsFocused), arg3))); var enabledMember = MemberProvider.GetBindingMember(typeof(VisualElement), nameof(VisualElement.IsEnabled), true, false); if (enabledMember != null) { MemberProvider.Register(typeof(VisualElement), AttachedMemberConstants.Enabled, enabledMember, true); } }
private static void RegisterDialogMembers(IBindingMemberProvider memberProvider) { memberProvider.Register(AttachedBindingMember.CreateMember <Element, object>(AttachedMemberConstants.Parent, (info, element) => element.Parent ?? BindingExtensions.AttachedParentMember.GetValue(element, null), (info, element, arg3) => BindingExtensions.AttachedParentMember.SetValue(element, arg3), (info, element, arg3) => BindingExtensions.AttachedParentMember.TryObserve(element, arg3))); IBindingMemberInfo member = memberProvider.GetBindingMember(typeof(EntryElement), "Changed", true, false); if (member != null) { memberProvider.Register(AttachedBindingMember.CreateEvent <EntryElement>("ValueChanged", (info, element, arg3) => member.TryObserve(element, arg3))); } memberProvider.Register(AttachedBindingMember.CreateEvent <StringElement>("Tapped", (info, element, arg3) => { var weakWrapper = arg3.ToWeakWrapper(); IDisposable unsubscriber = null; NSAction action = () => { if (!weakWrapper.EventListener.TryHandle(weakWrapper.EventListener, EventArgs.Empty)) { unsubscriber.Dispose(); } }; unsubscriber = WeakActionToken.Create(element, action, (stringElement, nsAction) => stringElement.Tapped -= nsAction); element.Tapped += action; return(unsubscriber); })); }
protected override bool LoadInternal() { BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, bool>("IsBusy", IsBusyChanged)); BindingServiceProvider.MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <View, string>("BusyMessage", BusyMessageChanged)); IocContainer.BindToConstant <IRepository>(new FileRepository()); return(true); }
public static void RegisterButtonMembers() { BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIControl.ClickEvent.Override <UIButton>()); MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UIButton.Title, (info, button) => button.CurrentTitle, (info, button, arg3) => button.SetTitle(arg3, UIControlState.Normal))); }
public void ProviderShouldRegisterUnregisterAndResolveAttachedMemberMulti() { const int count = 10; const string memberPath = "Test"; var targetType = typeof(object); var members = new List <IBindingMemberInfo>(); var provider = CreateMemberProvider(); for (int i = 0; i < count; i++) { var memberInfo = AttachedBindingMember.CreateAutoProperty(memberPath + i, typeof(object)); provider.GetBindingMember(targetType, memberPath + i, false, false).ShouldBeNull(); members.Add(memberInfo); provider.Register(targetType, memberInfo, false); } for (int i = 0; i < count; i++) { provider.GetBindingMember(targetType, memberPath + i, false, false) .ShouldEqual(members[i]); } provider.Unregister(targetType); for (int i = 0; i < count; i++) { provider.GetBindingMember(targetType, memberPath + i, false, false) .ShouldBeNull(); } }
public static void RegisterDialogEntryElementMembers() { var field = typeof(EntryElement).GetField("entry", BindingFlags.NonPublic | BindingFlags.Instance); if (field != null && field.FieldType == typeof(UITextField)) { var getEntryField = ServiceProvider.ReflectionManager.GetMemberGetter <UITextField>(field); TouchBindingErrorProvider.TryGetEntryField = target => { var element = target as EntryElement; if (element != null) { target = getEntryField(element); } return(target); }; } BindingBuilderExtensions.RegisterDefaultBindingMember <EntryElement>(nameof(EntryElement.Value)); var member = MemberProvider.GetBindingMember(typeof(EntryElement), nameof(EntryElement.Changed), true, false); if (member != null) { MemberProvider.Register(AttachedBindingMember.CreateEvent <EntryElement>("ValueChanged", (info, element, arg3) => member.TryObserve(element, arg3))); } }
public void ProviderShouldSelectTheBestMember2() { const string path = "Test"; var baseType = typeof(IInterface); var parentType = typeof(BaseClass); var targetType = typeof(Class); var provider = CreateMemberProvider(); var baseMember = AttachedBindingMember.CreateMember(path, typeof(object), (info, o) => null, null); var parentMember = AttachedBindingMember.CreateMember(path, typeof(object), (info, o) => null, null); var targetMember = AttachedBindingMember.CreateMember(path, typeof(object), (info, o) => null, null); provider.Register(baseType, baseMember, false); provider.Register(parentType, parentMember, false); provider.Register(targetType, targetMember, false); provider.GetBindingMember(targetType, path, false, false).ShouldEqual(targetMember); provider.GetBindingMember(parentType, path, false, false).ShouldEqual(parentMember); provider.GetBindingMember(baseType, path, false, false).ShouldEqual(baseMember); provider.Unregister(targetType, path); provider.GetBindingMember(targetType, path, false, false).ShouldEqual(parentMember); provider.GetBindingMember(parentType, path, false, false).ShouldEqual(parentMember); provider.GetBindingMember(baseType, path, false, false).ShouldEqual(baseMember); provider.Unregister(parentType, path); provider.GetBindingMember(targetType, path, false, false).ShouldEqual(baseMember); provider.GetBindingMember(parentType, path, false, false).ShouldEqual(baseMember); provider.GetBindingMember(baseType, path, false, false).ShouldEqual(baseMember); }
public static void RegisterTableViewMembers() { BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewRowAnimation)); BindingServiceProvider.ResourceResolver.AddType(typeof(UITableViewScrollPosition)); BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.UseAnimations] = BindingServiceProvider.TemplateMemberPriority + 1; BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.AddAnimation] = BindingServiceProvider.TemplateMemberPriority + 1; BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.RemoveAnimation] = BindingServiceProvider.TemplateMemberPriority + 1; BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.ReplaceAnimation] = BindingServiceProvider.TemplateMemberPriority + 1; BindingServiceProvider.BindingMemberPriorities[AttachedMembers.UITableView.ScrollPosition] = BindingServiceProvider.TemplateMemberPriority + 1; BindingBuilderExtensions.RegisterDefaultBindingMember(AttachedMembers.UIView.ItemsSource.Override <UITableView>()); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.AddAnimation)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.RemoveAnimation)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ReplaceAnimation)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ScrollPosition)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.UseAnimations)); MemberProvider.Register(AttachedBindingMember.CreateEvent(AttachedMembers.UITableView.SelectedItemChangedEvent)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(AttachedMembers.UIView.ItemsSource.Override <UITableView>(), TableViewItemsSourceChanged)); MemberProvider.Register(AttachedBindingMember.CreateMember(AttachedMembers.UITableView.SelectedItem, GetTableViewSelectedItem, SetTableViewSelectedItem, (info, view, arg3) => (IDisposable)view.SetBindingMemberValue(AttachedMembers.UITableView.SelectedItemChangedEvent, arg3))); var itemTemplateMember = AttachedBindingMember.CreateAutoProperty(AttachedMembers.UITableView.ItemTemplateSelector, (view, args) => args.NewValue?.Initialize(view)); MemberProvider.Register(itemTemplateMember); MemberProvider.Register(typeof(UITableView), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true); }
public void ResolverShouldRegisterAndResolveDynamicObjectTarget() { string name = BindingServiceProvider.ResourceResolver.RootElementResourceName; var visualTreeManagerMock = new VisualTreeManagerMock(); BindingServiceProvider.VisualTreeManager = visualTreeManagerMock; var rootMember = AttachedBindingMember.CreateAutoProperty <object, object>("root"); visualTreeManagerMock.GetRootMember = type => rootMember; var target = new object(); rootMember.SetValue(target, target); var dataContext = new DataContext { { BindingBuilderConstants.Target, target } }; var resolver = CreateBindingResourceResolver(); bool isInvoked = false; var value = resolver.ResolveObject(name, dataContext, false); value.Value.ShouldEqual(target); value.ValueChanged += (sender, args) => isInvoked = true; rootMember.SetValue(target, name); value.Value.ShouldEqual(name); isInvoked.ShouldBeTrue(); }
public static void RegisterObjectMembers() { var itemsSourceMember = AttachedBindingMember.CreateAutoProperty <object, IEnumerable>(AttachedMemberConstants.ItemsSource, ObjectItemsSourceChanged); var defaultMemberRegistration = new DefaultAttachedMemberRegistration <IEnumerable>(itemsSourceMember); MemberProvider.Register(defaultMemberRegistration.ToAttachedBindingMember <object>()); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <object, ICollectionViewManager>(AttachedMembers.UIView.CollectionViewManager.Path)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty <object, IContentViewManager>(AttachedMembers.UIView.ContentViewManager.Path)); MemberProvider.Register(AttachedBindingMember.CreateAutoProperty(ItemsSourceGeneratorBase.MemberDescriptor, (o, args) => { IEnumerable itemsSource = null; if (args.OldValue != null) { itemsSource = args.OldValue.ItemsSource; args.OldValue.SetItemsSource(null); } args.NewValue?.SetItemsSource(itemsSource); })); var itemTemplateMember = AttachedBindingMember.CreateAutoProperty <object, IDataTemplateSelector>(AttachedMemberConstants.ItemTemplateSelector); MemberProvider.Register(itemTemplateMember); MemberProvider.Register(typeof(object), AttachedMemberConstants.ItemTemplate, itemTemplateMember, true); }
public void CreateMemberGenericObserveTest() { bool isInvoked = false; IDisposable result = null; var listenerMock = new EventListenerMock(); var source = new BindingSourceModel(); const string path = "path"; var property = AttachedBindingMember.CreateMember <BindingSourceModel, string>(path, (info, o) => null, (info, o, v) => { }, (info, o, arg3) => { isInvoked = true; info.ShouldNotBeNull(); o.ShouldEqual(source); arg3.ShouldEqual(listenerMock); return(result); }); property.TryObserve(source, listenerMock).ShouldBeNull(); isInvoked.ShouldBeTrue(); isInvoked = false; result = new ActionToken(() => { }); property.TryObserve(source, listenerMock).ShouldEqual(result); isInvoked.ShouldBeTrue(); }