diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2017-02-27 09:33:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-27 09:33:23 +0100 |
commit | 62056766a49f08386f4516e06f64825ad0cb8e89 (patch) | |
tree | 74a04c34bcdda8d24e2afc319a401d730531f5e2 /Xamarin.Forms.Core | |
parent | 6d9fd894e4c940c5c2d16e4a4dcf59c2fa184642 (diff) | |
download | xamarin-forms-62056766a49f08386f4516e06f64825ad0cb8e89.tar.gz xamarin-forms-62056766a49f08386f4516e06f64825ad0cb8e89.tar.bz2 xamarin-forms-62056766a49f08386f4516e06f64825ad0cb8e89.zip |
[Xaml] no longer require a ServiceProvider for Trigger and PropertyCo… (#771)
* [Xaml] no longer require a ServiceProvider for Trigger and PropertyCondition
* fix
Diffstat (limited to 'Xamarin.Forms.Core')
-rw-r--r-- | Xamarin.Forms.Core/Interactivity/PropertyCondition.cs | 25 | ||||
-rw-r--r-- | Xamarin.Forms.Core/Interactivity/Trigger.cs | 10 |
2 files changed, 22 insertions, 13 deletions
diff --git a/Xamarin.Forms.Core/Interactivity/PropertyCondition.cs b/Xamarin.Forms.Core/Interactivity/PropertyCondition.cs index 34f4e1bc..b7f4013e 100644 --- a/Xamarin.Forms.Core/Interactivity/PropertyCondition.cs +++ b/Xamarin.Forms.Core/Interactivity/PropertyCondition.cs @@ -5,6 +5,8 @@ using Xamarin.Forms.Xaml; namespace Xamarin.Forms { + [ProvideCompiled("Xamarin.Forms.Core.XamlC.PassthroughValueProvider")] + [AcceptEmptyServiceProvider] public sealed class PropertyCondition : Condition, IValueProvider { readonly BindableProperty _stateProperty; @@ -27,6 +29,13 @@ namespace Xamarin.Forms if (IsSealed) throw new InvalidOperationException("Can not change Property once the Trigger has been applied."); _property = value; + + //convert the value + if (_property != null && s_valueConverter != null) + { + Func<MemberInfo> minforetriever = () => Property.DeclaringType.GetRuntimeProperty(Property.PropertyName); + Value = s_valueConverter.Convert(Value, Property.ReturnType, minforetriever, null); + } } } @@ -39,17 +48,20 @@ namespace Xamarin.Forms return; if (IsSealed) throw new InvalidOperationException("Can not change Value once the Trigger has been applied."); + + //convert the value + if (_property != null && s_valueConverter != null) + { + Func<MemberInfo> minforetriever = () => Property.DeclaringType.GetRuntimeProperty(Property.PropertyName); + value = s_valueConverter.Convert(value, Property.ReturnType, minforetriever, null); + } _triggerValue = value; } } object IValueProvider.ProvideValue(IServiceProvider serviceProvider) { - var valueconverter = serviceProvider.GetService(typeof(IValueConverterProvider)) as IValueConverterProvider; - Func<MemberInfo> minforetriever = () => Property.DeclaringType.GetRuntimeProperty(Property.PropertyName); - - object value = valueconverter.Convert(Value, Property.ReturnType, minforetriever, serviceProvider); - Value = value; + //This is no longer required return this; } @@ -58,10 +70,11 @@ namespace Xamarin.Forms return (bool)bindable.GetValue(_stateProperty); } + static IValueConverterProvider s_valueConverter = DependencyService.Get<IValueConverterProvider>(); + internal override void SetUp(BindableObject bindable) { object newvalue = bindable.GetValue(Property); - bool newState = (newvalue == Value) || (newvalue != null && newvalue.Equals(Value)); bindable.SetValue(_stateProperty, newState); bindable.PropertyChanged += OnAttachedObjectPropertyChanged; diff --git a/Xamarin.Forms.Core/Interactivity/Trigger.cs b/Xamarin.Forms.Core/Interactivity/Trigger.cs index a5d2c103..a18ef726 100644 --- a/Xamarin.Forms.Core/Interactivity/Trigger.cs +++ b/Xamarin.Forms.Core/Interactivity/Trigger.cs @@ -1,12 +1,12 @@ using System; using System.Collections.Generic; -using System.Reflection; using Xamarin.Forms.Xaml; namespace Xamarin.Forms { [ContentProperty("Setters")] - [ProvideCompiled("Xamarin.Forms.Core.XamlC.TriggerValueProvider")] + [ProvideCompiled("Xamarin.Forms.Core.XamlC.PassthroughValueProvider")] + [AcceptEmptyServiceProvider] public sealed class Trigger : TriggerBase, IValueProvider { public Trigger([TypeConverter(typeof(TypeTypeConverter))] [Parameter("TargetType")] Type targetType) : base(new PropertyCondition(), targetType) @@ -50,11 +50,7 @@ namespace Xamarin.Forms object IValueProvider.ProvideValue(IServiceProvider serviceProvider) { - var valueconverter = serviceProvider.GetService(typeof(IValueConverterProvider)) as IValueConverterProvider; - Func<MemberInfo> minforetriever = () => Property.DeclaringType.GetRuntimeProperty(Property.PropertyName); - - object value = valueconverter.Convert(Value, Property.ReturnType, minforetriever, serviceProvider); - Value = value; + //This is no longer required return this; } } |