private object GetItemFromTemplate(object view, int index) { object item = GetItem(index); if (_itemTemplateMember == null) { #if WINFORMS if (_isTabControl) { return(CreateDefaultTabPage(item)); } #endif return(GetDefaultTemplate(item)); } var selector = (IDataTemplateSelector)_itemTemplateMember.GetValue(view, null); if (selector == null) { #if WINFORMS if (_isTabControl) { return(CreateDefaultTabPage(item)); } #endif return(GetDefaultTemplate(item)); } return(selector.SelectTemplateWithContext(item, view)); }
private void UpdateValues() { if (_templateSelectorMember != null) { _templateSelector = _templateSelectorMember.GetValue(_container, Empty.Array <object>()) as TItem; } }
protected virtual object GetDefaultValue(object targetObject, object targetProperty, IDataBinding binding, string targetPath) { #if WPF var dp = targetProperty as DependencyProperty; if (dp != null) { return(((DependencyObject)targetObject).GetValue(dp)); } #endif var eventInfo = targetProperty as EventInfo; if (eventInfo != null) { return(CreateDelegateForEvent(eventInfo)); } if (_targetMemberInfo == null) { _targetMemberInfo = BindingServiceProvider .MemberProvider .GetBindingMember(targetObject.GetType(), targetPath, false, false); } if (_targetMemberInfo == null) { return(GetEmptyValue()); } #if WPF eventInfo = _targetMemberInfo.Member as EventInfo; if (eventInfo != null) { return(CreateDelegateForEvent(eventInfo)); } #endif return(_targetMemberInfo.GetValue(targetObject, null)); }
public object GetParent(object source) { if (_parentMember == null) { return(_attachedParent); } return(_parentMember.GetValue(source, Empty.Array <object>()) ?? _attachedParent); }
private ICollectionViewManager GetCollectionViewManager(object view) { if (_collectionViewManagerMember == null) { return(DefaultCollectionViewManager.Instance); } return(_collectionViewManagerMember.GetValue(view, null) as ICollectionViewManager ?? DefaultCollectionViewManager.Instance); }
/// <summary> /// Tries to find parent. /// </summary> public virtual object FindParent(object target) { Should.NotBeNull(target, "target"); Type type = target.GetType(); IBindingMemberInfo parentProp = GetParentMember(type); return(parentProp == null ? null : parentProp.GetValue(target, null)); }
protected override IBindingPathMembers UpdateInternal(IBindingPathMembers oldPath, bool hasSubscribers) { object source = GetActualSource(); if (source == null || source.IsUnsetValue()) { return(UnsetBindingPathMembers.Instance); } bool allMembersAvailable = true; IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider; IList <string> items = Path.Parts; //Trying to get member using full path with dot, example BindingErrorProvider.Errors or ErrorProvider.Errors. if (items.Count == 2) { var pathMember = memberProvider.GetBindingMember(source.GetType(), Path.Path, _ignoreAttachedMembers, false); if (pathMember != null) { var observer = TryObserveMember(source, pathMember, true); if (observer != null) { _listeners.Add(observer); } return(new MultiBindingPathMembers(_lastMemberListener.Reference, source, new[] { pathMember })); } } int lastIndex = items.Count - 1; var members = new List <IBindingMemberInfo>(); for (int index = 0; index < items.Count; index++) { string name = items[index]; IBindingMemberInfo pathMember = memberProvider .GetBindingMember(source.GetType(), name, _ignoreAttachedMembers, true); members.Add(pathMember); var observer = TryObserveMember(source, pathMember, index == lastIndex); if (observer != null) { _listeners.Add(observer); } if (index == lastIndex) { break; } source = pathMember.GetValue(source, null); if (source == null || source.IsUnsetValue()) { allMembersAvailable = false; break; } } return(allMembersAvailable ? new MultiBindingPathMembers(_lastMemberListener.Reference, source, members) : UnsetBindingPathMembers.Instance); }
private void UpdateValues() { if (_templateSelectorMember != null) { var value = _templateSelectorMember.GetValue(_container, Empty.Array <object>()); _collectionCellTemplateSelector = value as ICollectionCellTemplateSelector; _tableCellTemplateSelector = value as ITableCellTemplateSelector; } }
private void SourceOnValueChanging(IBindingSourceAccessor sender, ValueAccessorChangingEventArgs args) { if (args.Cancel) { return; } object value = Binding.TargetAccessor.Source.GetPathMembers(false).PenultimateValue; if (value != null && !value.IsUnsetValue()) { args.Cancel = (bool)_member.GetValue(value, null); } }
private void UpdateValues() { if (_templateSelectorMember != null) { var value = _templateSelectorMember.GetValue(_container, Empty.Array <object>()); _resourceSelector = value as IResourceDataTemplateSelector; _templateSelector = value as IDataTemplateSelector; } if (_templateMember != null) { _templateId = _templateMember.GetValue(_container, Empty.Array <object>()) as int?; } }
public static TValue TryGetValue <TValue>([CanBeNull] this IBindingMemberInfo bindingMember, object item, TValue defaultValue = default(TValue), bool itemCanBeNull = false) { if (bindingMember == null || (!itemCanBeNull && item == null)) { return(defaultValue); } var value = bindingMember.GetValue(item, null); if (value is TValue) { return((TValue)value); } return(defaultValue); }
private object GetItemFromTemplate(object item) { if (_templateMemberInfo == null) { return(GetDefaultTemplate(item)); } var selector = (IDataTemplateSelector)_templateMemberInfo.GetValue(_container, null); if (selector == null) { return(GetDefaultTemplate(item)); } return(selector.SelectTemplateWithContext(item, _container)); }
protected virtual object GetDefaultValue(object targetObject, object targetProperty, IDataBinding binding, string targetPath) { #if WPF var dp = targetProperty as DependencyProperty; if (dp != null) { return(((DependencyObject)targetObject).GetValue(dp)); } #endif var eventInfo = targetProperty as EventInfo; if (eventInfo != null) { return(CreateDelegateForEvent(eventInfo)); } if (_targetMemberInfo == null) { _targetMemberInfo = BindingServiceProvider .MemberProvider .GetBindingMember(targetObject.GetType(), targetPath, false, false); } if (_targetMemberInfo == null) { return(GetEmptyValue()); } #if XAMARIN_FORMS //BUG: null value throw an error https://bugzilla.xamarin.com/show_bug.cgi?id=24584 var value = _targetMemberInfo.GetValue(targetObject, null); if (value == null && _targetMemberInfo.Type == typeof(string)) { return(string.Empty); } return(value); #else return(_targetMemberInfo.GetValue(targetObject, null)); #endif }
/// <summary> /// Updates the current values. /// </summary> protected override void UpdateInternal() { try { ClearListeners(); object source = GetActualSource(); if (source == null || source.IsUnsetValue()) { _members = UnsetBindingPathMembers.Instance; return; } bool allMembersAvailable = true; IBindingMemberProvider memberProvider = BindingServiceProvider.MemberProvider; IList <string> items = Path.Parts; int lastIndex = items.Count - 1; var members = new List <IBindingMemberInfo>(); for (int index = 0; index < items.Count; index++) { string name = items[index]; IBindingMemberInfo pathMember = memberProvider .GetBindingMember(source.GetType(), name, _ignoreAttachedMembers, true); members.Add(pathMember); var observer = TryObserveMember(source, pathMember, index == lastIndex); if (observer != null) { _listeners.Add(observer); } if (index == lastIndex) { break; } source = pathMember.GetValue(source, null); if (source == null || source.IsUnsetValue()) { allMembersAvailable = false; break; } } _members = allMembersAvailable ? new MultiBindingPathMembers(_selfReference, source, Path, members) : UnsetBindingPathMembers.Instance; } catch (Exception) { _members = UnsetBindingPathMembers.Instance; throw; } }
public void Inflate(Activity activity, IMenu menu) { IBindingMemberInfo bindingMember = BindingServiceProvider .MemberProvider .GetBindingMember(typeof(OptionsMenu), AttachedMembers.Toolbar.MenuTemplate, false, true); var value = (int)bindingMember.GetValue(this, null); activity.MenuInflater.Inflate(value, menu, this); if (_bindings != null) { foreach (string binding in _bindings) { BindingServiceProvider.BindingProvider.CreateBindingsFromString(menu, binding, null); } } }
internal static string TryGetValue(object instance, string name) { if (instance == null) { return(null); } IBindingMemberInfo member = BindingServiceProvider .MemberProvider .GetBindingMember(instance.GetType(), name, false, false); if (member == null || !member.CanRead) { return(null); } return(member.GetValue(instance, null)?.ToString()); }
public bool TryHandle(object sender, object message) { var view = _view; if (!view.IsAlive()) { Update(null); return(false); } var activity = _view.Context.GetActivity(); if (activity == null) { Update(null); Tracer.Warn("(PopupMenu) The contex of view is not an activity."); return(false); } var templateId = (int)BindingServiceProvider .MemberProvider .GetBindingMember(_viewType, AttachedMemberNames.PopupMenuTemplate, false, true) .GetValue(_view, null); IBindingMemberInfo bindingMember = BindingServiceProvider .MemberProvider .GetBindingMember(_viewType, AttachedMemberNames.PlacementTargetPath, false, false); if (bindingMember != null) { var path = (string)bindingMember.GetValue(view, null); if (!string.IsNullOrEmpty(path)) { var itemView = (View)BindingExtensions.GetValueFromPath(message, path); if (itemView != null) { view = itemView; } } } var menu = new PopupMenu(activity, view); activity.MenuInflater.Inflate(templateId, menu.Menu, view); menu.SetOnDismissListener(DismissListener); menu.Show(); return(true); }
internal static DependencyObject FindParent(FrameworkElement target) { IBindingMemberInfo member = BindingServiceProvider .MemberProvider .GetBindingMember(target.GetType(), "PlacementTarget", false, false); if (member != null) { object value = member.GetValue(target, null); if (value == null) { return(null); } return((DependencyObject)value); } return(VisualTreeHelper.GetParent(target) ?? target.Parent); }
private object GetItemFromTemplate(object item) { var target = _containerRef.Target; if (_templateMemberInfo == null || target == null) { return(GetDefaultTemplate(item)); } var selector = (IDataTemplateSelector)_templateMemberInfo.GetValue(target, null); if (selector == null) { return(GetDefaultTemplate(item)); } return(selector.SelectTemplateWithContext(item, target)); }
public static object GetValueFromPath(object src, string strPath, int firstMemberIndex = 0) { IBindingPath path = BindingServiceProvider.BindingPathFactory(strPath); for (int index = firstMemberIndex; index < path.Parts.Count; index++) { string item = path.Parts[index]; if (src.IsNullOrUnsetValue()) { return(null); } IBindingMemberInfo member = BindingServiceProvider .MemberProvider .GetBindingMember(src.GetType(), item, false, true); src = member.GetValue(src, null); } return(src); }
public void Inflate(Activity activity, IMenu menu) { if (!activity.IsAlive() || !menu.IsAlive()) { return; } IBindingMemberInfo bindingMember = BindingServiceProvider .MemberProvider .GetBindingMember(typeof(OptionsMenu), AttachedMembers.Toolbar.MenuTemplate, false, true); var value = (int?)bindingMember.GetValue(this, null); if (value == null) { return; } activity.MenuInflater.Inflate(value.Value, menu, this); if (!string.IsNullOrEmpty(_bind)) { BindingServiceProvider.BindingProvider.CreateBindingsFromString(menu, _bind, null); } }
internal static object FindParent(FrameworkElement target) { IBindingMemberInfo member = BindingServiceProvider .MemberProvider .GetBindingMember(target.GetType(), "PlacementTarget", false, false); if (member != null) { object value = member.GetValue(target, null); if (value != null) { return(value); } } #if WPF if (target.IsLoaded) { return(target.Parent ?? VisualTreeHelper.GetParent(target) ?? LogicalTreeHelper.GetParent(target)); } return(target.Parent); #else return(target.Parent ?? VisualTreeHelper.GetParent(target)); #endif }
protected override bool SetValueInternal(IBindingSourceAccessor targetAccessor, IDataContext context, bool throwOnError) { IBindingPathMembers members = _bindingSource.GetPathMembers(throwOnError); object penultimateValue = members.PenultimateValue; if (penultimateValue.IsUnsetValue() || (penultimateValue == null && !members.AllMembersAvailable)) { if (members.Path.IsDebuggable) { DebugInfo($"Binding cannot set value for path {members.Path.Path}", new object[] { members }); } return(false); } IBindingMemberInfo lastMember = members.LastMember; object oldValue; object newValue = targetAccessor.GetValue(lastMember, context, throwOnError); if (lastMember.CanRead && !BindingMemberType.BindingContext.EqualsWithoutNullCheck(lastMember.MemberType)) { if (_disableEqualityChecking && !BindingMemberType.Event.EqualsWithoutNullCheck(lastMember.MemberType)) { oldValue = BindingConstants.UnsetValue; } else { oldValue = lastMember.GetValue(penultimateValue, null); } if (ReferenceEquals(oldValue, newValue) || newValue.IsUnsetValueOrDoNothing()) { if (members.Path.IsDebuggable) { DebugInfo($"Binding ignores setter because old value: '{oldValue}' equals to new value '{newValue}'", new[] { members, oldValue, newValue }); } return(false); } } else { oldValue = BindingConstants.UnsetValue; if (newValue.IsUnsetValueOrDoNothing()) { if (members.Path.IsDebuggable) { DebugInfo($"Binding ignores setter for value '{newValue}'", new[] { members, newValue }); } return(false); } } ValueAccessorChangingEventArgs args = null; if (ValueChanging != null) { args = RaiseValueChanging(context, penultimateValue, lastMember, oldValue, newValue); if (args != null) { if (args.Cancel) { return(false); } if (!ReferenceEquals(newValue, args.NewValue)) { newValue = args.NewValue; if (newValue.IsUnsetValueOrDoNothing()) { if (members.Path.IsDebuggable) { DebugInfo($"Binding ignores setter for value '{newValue}'", new[] { members, newValue }); } return(false); } } } } newValue = BindingServiceProvider.ValueConverter(lastMember, lastMember.Type, newValue); if (Equals(oldValue, newValue)) { if (members.Path.IsDebuggable) { DebugInfo($"Binding ignores setter because old value: '{oldValue}' equals to new value '{newValue}'", new[] { members, oldValue, newValue }); } return(false); } if (BindingMemberType.Event.EqualsWithoutNullCheck(lastMember.MemberType)) { TryRegisterEvent((BindingActionValue)oldValue, newValue, context, members); RaiseValueChanged(context, penultimateValue, lastMember, oldValue, newValue, args); } else { _closure?.Unsubscribe(false, _isOneTime); lastMember.SetSingleValue(penultimateValue, newValue); if (members.Path.IsDebuggable) { DebugInfo($"Binding set value: '{newValue}' for source: '{penultimateValue}' with path: '{lastMember.Path}'", new[] { newValue, penultimateValue, lastMember }); } if (ValueChanged != null) { RaiseValueChanged(context, penultimateValue, lastMember, oldValue, newValue, args); } } return(true); }
private ICollectionViewManager GetCollectionViewManager() { return(_collectionViewManagerMember == null ? null : _collectionViewManagerMember.GetValue(_viewGroup, null) as ICollectionViewManager); }
protected virtual IBindingMemberInfo GetTargetProperty(object targetObject, IServiceProvider serviceProvider, out string path) { //NOTE Xamarin doesn't support this property. // return serviceProvider.GetService<IProvideValueTarget>().TargetProperty; //Making some reflection magic. path = null; if (targetObject == null) { return(null); } UpdateMember(ref _getXamlNodeProvider, serviceProvider, "IXamlNodeProvider"); var xamlNodeProvider = _getXamlNodeProvider.GetValue(serviceProvider, null); if (xamlNodeProvider == null) { return(null); } UpdateMember(ref _getXamlNode, xamlNodeProvider, "XamlNode"); var xamlNode = _getXamlNode.GetValue(xamlNodeProvider, null); if (xamlNode == null) { return(null); } UpdateMember(ref _getParentNode, xamlNode, "Parent"); var parentNode = _getParentNode.GetValue(xamlNode, null); if (parentNode == null) { return(null); } UpdateMember(ref _getProperties, parentNode, "Properties"); var properties = (IDictionary)_getProperties.GetValue(parentNode, null); if (properties == null) { return(null); } object xmlName = null; foreach (DictionaryEntry entry in properties) { if (ReferenceEquals(entry.Value, xamlNode)) { xmlName = entry.Key; break; } } if (xmlName == null) { return(null); } UpdateMember(ref _getLocalName, xmlName, "LocalName"); path = (string)_getLocalName.GetValue(xmlName, null); return(BindingServiceProvider.MemberProvider.GetBindingMember(targetObject.GetType(), path, false, false)); }
protected override IBindingPathMembers UpdateInternal(IBindingPathMembers oldPath, bool hasSubscribers) { object source = GetActualSource(); if (source.IsNullOrUnsetValue()) { return(UnsetBindingPathMembers.Instance); } ClearListeners(); int lastIndex; if (_hasStablePath) { var pathMembers = oldPath as MultiBindingPathMembers; if (pathMembers != null) { var list = pathMembers.Members; lastIndex = list.Count - 1; for (int index = 0; index < list.Count; index++) { var pathMember = list[index]; if (_observable) { var observer = TryObserveMember(source, pathMember, index == lastIndex); if (observer != null) { _listeners.Add(observer); } } if (index == lastIndex) { break; } source = pathMember.GetValue(source, null); if (source.IsNullOrUnsetValue()) { if (Path.IsDebuggable) { DebugInfo($"Value is not available for '{pathMember.Path}'", new[] { GetActualSource(false) }); } return(UnsetBindingPathMembers.Instance); } } pathMembers.PenultimateValueRef = ToolkitExtensions.GetWeakReference(source); return(pathMembers); } } IList <string> items = Path.Parts; lastIndex = items.Count - 1; var members = new List <IBindingMemberInfo>(); for (int index = 0; index < items.Count; index++) { IBindingMemberInfo pathMember = GetBindingMember(source.GetType(), items[index], _ignoreAttachedMembers, _optional); if (pathMember == null) { return(UnsetBindingPathMembers.Instance); } members.Add(pathMember); if (_observable) { var observer = TryObserveMember(source, pathMember, index == lastIndex); if (observer != null) { _listeners.Add(observer); } } if (index == lastIndex) { break; } source = pathMember.GetValue(source, null); if (source.IsNullOrUnsetValue()) { if (Path.IsDebuggable) { DebugInfo($"Value is not available for '{pathMember.Path}'", new[] { GetActualSource(false) }); } return(UnsetBindingPathMembers.Instance); } } return(new MultiBindingPathMembers(_lastMemberListener.Reference, source, members)); }
private ICollectionViewManager GetCollectionViewManager() { return(_collectionViewManagerMember == null ? null : _collectionViewManagerMember.GetValue(_preference, null) as ICollectionViewManager); }
private ICollectionViewManager GetCollectionViewManager() { return((ICollectionViewManager)_collectionViewManagerMember.GetValue(TabHost, Empty.Array <object>())); }
public object GetValue(object src, object[] args) { return(_member.GetValue(src, BindingReflectionExtensions.InsertFirstArg(args ?? MugenMvvmToolkit.Empty.Array <object>(), _indexes))); }
protected override bool SetValueInternal(IBindingSourceAccessor targetAccessor, IDataContext context, bool throwOnError) { IBindingPathMembers members = _bindingSource.GetPathMembers(throwOnError); if (!members.AllMembersAvailable) { return(false); } object penultimateValue = members.PenultimateValue; IBindingMemberInfo lastMember = members.LastMember; object oldValue; object newValue = targetAccessor.GetValue(lastMember, context, throwOnError); if (lastMember.CanRead && !BindingMemberType.BindingContext.EqualsWithoutNullCheck(lastMember.MemberType)) { oldValue = lastMember.GetValue(penultimateValue, null); if (ReferenceEquals(oldValue, newValue) || newValue.IsUnsetValueOrDoNothing()) { return(false); } } else { oldValue = BindingConstants.UnsetValue; if (newValue.IsUnsetValueOrDoNothing()) { return(false); } } ValueAccessorChangingEventArgs args = null; if (ValueChanging != null) { args = RaiseValueChanging(context, penultimateValue, lastMember, oldValue, newValue); if (args != null) { if (args.Cancel) { return(false); } if (!ReferenceEquals(newValue, args.NewValue)) { newValue = args.NewValue; if (newValue.IsUnsetValueOrDoNothing()) { return(false); } } } } newValue = BindingServiceProvider.ValueConverter(lastMember, lastMember.Type, newValue); if (Equals(oldValue, newValue)) { return(false); } if (BindingMemberType.Event.EqualsWithoutNullCheck(lastMember.MemberType)) { TryRegisterEvent((BindingActionValue)oldValue, newValue, context); RaiseValueChanged(context, penultimateValue, lastMember, oldValue, newValue, args); } else { if (_closure != null) { _closure.Unsubscribe(false, _isOneTime); } lastMember.SetSingleValue(penultimateValue, newValue); if (ValueChanged != null) { RaiseValueChanged(context, penultimateValue, lastMember, oldValue, newValue, args); } } return(true); }