public static void SetValue(object instance, MutableMember member, object value) { var perspexProperty = FindPerspexProperty(instance, member); if (value is IBinding) { SetBinding(instance, member, perspexProperty, (IBinding)value); } else if (perspexProperty != null) { ((PerspexObject)instance).SetValue(perspexProperty, value); } else if (instance is Setter && member.Name == "Value") { // TODO: Make this more generic somehow. var setter = (Setter)instance; var targetType = setter.Property.PropertyType; var valuePipeline = new ValuePipeline(member.TypeRepository, null); var xamlType = member.TypeRepository.GetByType(targetType); SetClrProperty(instance, member, valuePipeline.ConvertValueIfNecessary(value, xamlType)); } else { SetClrProperty(instance, member, value); } }
private static PerspexProperty FindPerspexProperty(object instance, MutableMember member) { var target = instance as IPerspexObject; var attached = member as PerspexAttachableXamlMember; if (target == null) { return(null); } PerspexProperty property; string propertyName; if (attached == null) { propertyName = member.Name; property = PerspexPropertyRegistry.Instance.GetRegistered((PerspexObject)target) .FirstOrDefault(x => x.Name == propertyName); } else { // Ensure the OwnerType's static ctor has been run. RuntimeHelpers.RunClassConstructor(attached.DeclaringType.UnderlyingType.TypeHandle); propertyName = attached.DeclaringType.UnderlyingType.Name + '.' + member.Name; property = PerspexPropertyRegistry.Instance.GetRegistered((PerspexObject)target) .Where(x => x.IsAttached && x.OwnerType == attached.DeclaringType.UnderlyingType) .FirstOrDefault(x => x.Name == member.Name); } return(property); }
public static void SetValue( object instance, MutableMember member, object value, IValueContext context) { var perspexProperty = FindPerspexProperty(instance, member); if (value is IBinding) { SetBinding(instance, member, perspexProperty, (IBinding)value); } else if (perspexProperty != null) { ((PerspexObject)instance).SetValue(perspexProperty, value); } else if (instance is Setter && member.Name == "Value") { // TODO: Make this more generic somehow. var setter = (Setter)instance; var targetType = setter.Property.PropertyType; var xamlType = member.TypeRepository.GetByType(targetType); var convertedValue = default(object); if (CommonValueConversion.TryConvert(value, xamlType, context, out convertedValue)) { SetClrProperty(instance, member, convertedValue); } } else { SetClrProperty(instance, member, value); } }
public static void SetValue( object instance, MutableMember member, object value, IValueContext context) { var perspexProperty = FindPerspexProperty(instance, member); if (value is IBinding) { SetBinding(instance, member, perspexProperty, context, (IBinding)value); } else if (perspexProperty != null) { ((PerspexObject)instance).SetValue(perspexProperty, value); } else if (instance is Setter && member.Name == "Value") { // TODO: Make this more generic somehow. var setter = (Setter)instance; var targetType = setter.Property.PropertyType; var xamlType = member.TypeRepository.GetByType(targetType); var convertedValue = default(object); if (CommonValueConversion.TryConvert(value, xamlType, context, out convertedValue)) { SetClrProperty(instance, member, convertedValue); } } else { SetClrProperty(instance, member, value); } }
private static PerspexProperty FindPerspexProperty(object instance, MutableMember member) { var registry = PerspexPropertyRegistry.Instance; var attached = member as PerspexAttachableXamlMember; var target = instance as PerspexObject; if (target == null) { return(null); } if (attached == null) { return(registry.FindRegistered(target, member.Name)); } else { var ownerType = attached.DeclaringType.UnderlyingType; RuntimeHelpers.RunClassConstructor(ownerType.TypeHandle); return(registry.GetRegistered(target) .Where(x => x.OwnerType == ownerType && x.Name == attached.Name) .FirstOrDefault()); } }
private static PerspexProperty FindPerspexProperty(object instance, MutableMember member) { var target = instance as IPerspexObject; var attached = member as PerspexAttachableXamlMember; if (target == null) { return null; } PerspexProperty property; string propertyName; if (attached == null) { propertyName = member.Name; property = PerspexPropertyRegistry.Instance.GetRegistered((PerspexObject)target) .FirstOrDefault(x => x.Name == propertyName); } else { // Ensure the OwnerType's static ctor has been run. RuntimeHelpers.RunClassConstructor(attached.DeclaringType.UnderlyingType.TypeHandle); propertyName = attached.DeclaringType.UnderlyingType.Name + '.' + member.Name; property = PerspexPropertyRegistry.Instance.GetRegistered((PerspexObject)target) .Where(x => x.IsAttached && x.OwnerType == attached.DeclaringType.UnderlyingType) .FirstOrDefault(x => x.Name == member.Name); } return property; }
private static AvaloniaProperty FindAvaloniaProperty(object instance, MutableMember member) { var registry = AvaloniaPropertyRegistry.Instance; var attached = member as AvaloniaAttachableXamlMember; var target = instance as AvaloniaObject; if (target == null) { return null; } if (attached == null) { return registry.FindRegistered(target, member.Name); } else { var ownerType = attached.DeclaringType.UnderlyingType; RuntimeHelpers.RunClassConstructor(ownerType.TypeHandle); return registry.GetRegistered(target) .Where(x => x.OwnerType == ownerType && x.Name == attached.Name) .FirstOrDefault(); } }
private static void SetClrProperty(object instance, MutableMember member, object value) { if (member.IsAttachable) { member.Setter.Invoke(null, new[] { instance, value }); } else { member.Setter.Invoke(instance, new[] { value }); } }
private MutableMember GetMemberForDottedLocator(PropertyLocator propertyLocator) { var ownerName = propertyLocator.Owner.PropertyName; var ownerPrefix = propertyLocator.Owner.Prefix; var owner = typeSource.GetByPrefix(ownerPrefix, ownerName); MutableMember member = owner.GetAttachableMember(propertyLocator.PropertyName); return(member); }
private static void SetBinding( object instance, MutableMember member, PerspexProperty property, IBinding binding) { if (!(AssignBinding(instance, member, binding) || ApplyBinding(instance, property, binding))) { throw new InvalidOperationException( $"Cannot assign to '{member.Name}' on '{instance.GetType()}"); } }
private static bool AssignBinding(object instance, MutableMember member, IBinding binding) { var property = instance.GetType() .GetRuntimeProperties() .FirstOrDefault(x => x.Name == member.Name); if (property?.GetCustomAttribute<AssignBindingAttribute>() != null) { property.SetValue(instance, binding); return true; } return false; }
private static bool AssignBinding(object instance, MutableMember member, IBinding binding) { var property = instance.GetType() .GetRuntimeProperties() .FirstOrDefault(x => x.Name == member.Name); if (property?.GetCustomAttribute <AssignBindingAttribute>() != null) { property.SetValue(instance, binding); return(true); } return(false); }
private bool TryGetDeferredAssembler(MutableMember member, out IDeferredLoader loader) { Guard.ThrowIfNull(member, nameof(member)); var propInfo = member.DeclaringType.UnderlyingType.GetRuntimeProperty(member.Name); if (propInfo!=null) { var success = mapping.TryGetMapping(propInfo, out loader); return success; } loader = null; return false; }
private static XamlMember GetMember(MutableMember member, XamlSchemaContext context) { var declaringType = ToWpf(member.DeclaringType, context); if (!member.IsAttachable) { var xamlMember = declaringType.GetMember(member.Name); return(new XamlMemberAdapter(xamlMember, context)); } else { var xamlMember = declaringType.GetAttachableMember(member.Name); return(new XamlMemberAdapter(xamlMember, context, member.Name, xamlMember.Invoker.UnderlyingGetter, xamlMember.Invoker.UnderlyingSetter)); } }
private bool TryGetDeferredAssembler(MutableMember member, out IDeferredLoader loader) { Guard.ThrowIfNull(member, nameof(member)); var propInfo = member.DeclaringType.UnderlyingType.GetRuntimeProperty(member.Name); if (propInfo != null) { var success = mapping.TryGetMapping(propInfo, out loader); return(success); } loader = null; return(false); }
private static XamlMember GetMember(MutableMember member, XamlSchemaContext context) { var declaringType = ToWpf(member.DeclaringType, context); if (!member.IsAttachable) { var xamlMember = declaringType.GetMember(member.Name); return new XamlMemberAdapter(xamlMember, context); } else { var xamlMember = declaringType.GetAttachableMember(member.Name); return new XamlMemberAdapter(xamlMember, context, member.Name, xamlMember.Invoker.UnderlyingGetter, xamlMember.Invoker.UnderlyingSetter); } }
private static PerspexProperty FindPerspexProperty(object instance, MutableMember member) { var target = instance as PerspexObject; if (target == null) { return null; } var attached = member as PerspexAttachableXamlMember; var propertyName = attached == null ? member.Name : member.DeclaringType.Name + "." + member.Name; return PerspexPropertyRegistry.Instance.FindRegistered(target, propertyName); }
private static PerspexProperty FindPerspexProperty(object instance, MutableMember member) { var target = instance as PerspexObject; if (target == null) { return(null); } var attached = member as PerspexAttachableXamlMember; var propertyName = attached == null ? member.Name : member.DeclaringType.Name + "." + member.Name; return(PerspexPropertyRegistry.Instance.FindRegistered(target, propertyName)); }
public AvaloniaMemberValuePlugin(MutableMember xamlMember) : base(xamlMember) { _xamlMember = xamlMember; }
public PerspexMemberValuePlugin(MutableMember xamlMember) : base(xamlMember) { _xamlMember = xamlMember; }
public MemberValuePlugin(MutableMember member) : base(member) { this.member = member; }
private static object GetValueTuple(object instance, MutableMember member) { var xamlMemberBase = member; return(xamlMemberBase.GetValue(instance)); }
private static bool IsMemberEquivalentToNameDirective(MutableMember memberToCheck) { return Equals(memberToCheck, memberToCheck.DeclaringType.RuntimeNamePropertyMember); }
public MemberNodesBlock(Instruction headingInstruction) { member = (MutableMember)headingInstruction.Member; }
public XamlSetValueEventArgs(MutableMember member, object value) { Value = value; Member = member; }
private static bool IsMemberEquivalentToNameDirective(MutableMember memberToCheck) { return(Equals(memberToCheck, memberToCheck.DeclaringType.RuntimeNamePropertyMember)); }
private static object GetValueTuple(object instance, MutableMember member) { var xamlMemberBase = member; return xamlMemberBase.GetValue(instance); }