summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core
diff options
context:
space:
mode:
authorStephane Delcroix <stephane@delcroix.org>2017-02-27 09:33:23 +0100
committerGitHub <noreply@github.com>2017-02-27 09:33:23 +0100
commit62056766a49f08386f4516e06f64825ad0cb8e89 (patch)
tree74a04c34bcdda8d24e2afc319a401d730531f5e2 /Xamarin.Forms.Core
parent6d9fd894e4c940c5c2d16e4a4dcf59c2fa184642 (diff)
downloadxamarin-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.cs25
-rw-r--r--Xamarin.Forms.Core/Interactivity/Trigger.cs10
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;
}
}