diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexMemberValuePlugin.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexMemberValuePlugin.cs index 277326fcb9..f4433f6a76 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexMemberValuePlugin.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexMemberValuePlugin.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; +using OmniXaml.TypeConversion; using OmniXaml.Typing; namespace Perspex.Markup.Xaml.Context @@ -16,9 +17,9 @@ namespace Perspex.Markup.Xaml.Context _xamlMember = xamlMember; } - public override void SetValue(object instance, object value) + public override void SetValue(object instance, object value, IValueContext valueContext) { - PropertyAccessor.SetValue(instance, _xamlMember, value); + PropertyAccessor.SetValue(instance, _xamlMember, value, valueContext); } } } diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs index bf04683a4a..d8f40b3fe4 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexObjectAssembler.cs @@ -4,19 +4,21 @@ using System; using OmniXaml; using OmniXaml.ObjectAssembler; -using Perspex.Controls; +using OmniXaml.ObjectAssembler.Commands; +using OmniXaml.TypeConversion; using Perspex.Markup.Xaml.Templates; namespace Perspex.Markup.Xaml.Context { - using OmniXaml.ObjectAssembler.Commands; - public class PerspexObjectAssembler : IObjectAssembler { private readonly TemplateHostingObjectAssembler objectAssembler; private readonly ObjectAssembler assembler; - public PerspexObjectAssembler(IRuntimeTypeSource runtimeTypeSource, Settings objectAssemblerSettings = null) + public PerspexObjectAssembler( + IRuntimeTypeSource typeSource, + ITopDownValueContext topDownValueContext, + Settings settings = null) { var mapping = new DeferredLoaderMapping(); mapping.Map(x => x.Content, new TemplateLoader()); @@ -25,7 +27,8 @@ namespace Perspex.Markup.Xaml.Context mapping.Map(x => x.Content, new TemplateLoader()); mapping.Map(x => x.Content, new TemplateLoader()); - assembler = new ObjectAssembler(runtimeTypeSource, new TopDownValueContext(), objectAssemblerSettings); + var valueContext = new ValueContext(typeSource, topDownValueContext); + assembler = new ObjectAssembler(typeSource, valueContext, settings); objectAssembler = new TemplateHostingObjectAssembler(assembler, mapping); } diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexParserFactory.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexParserFactory.cs index 00aaa8f828..6f7a6574a1 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexParserFactory.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexParserFactory.cs @@ -26,7 +26,10 @@ namespace Perspex.Markup.Xaml.Context { var xamlInstructionParser = new OrderAwareInstructionParser(new InstructionParser(runtimeTypeSource)); - IObjectAssembler objectAssembler = new PerspexObjectAssembler(runtimeTypeSource, settings); + IObjectAssembler objectAssembler = new PerspexObjectAssembler( + runtimeTypeSource, + new TopDownValueContext(), + settings); var phaseParserKit = new PhaseParserKit( new ProtoInstructionParser(runtimeTypeSource), xamlInstructionParser, diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PropertyAccessor.cs b/src/Markup/Perspex.Markup.Xaml/Context/PropertyAccessor.cs index 944b3301ec..de17dc99e1 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PropertyAccessor.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PropertyAccessor.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using OmniXaml.ObjectAssembler; +using OmniXaml.TypeConversion; using OmniXaml.Typing; using Perspex.Data; using Perspex.Styling; @@ -14,7 +15,11 @@ namespace Perspex.Markup.Xaml.Context { internal static class PropertyAccessor { - public static void SetValue(object instance, MutableMember member, object value) + public static void SetValue( + object instance, + MutableMember member, + object value, + IValueContext context) { var perspexProperty = FindPerspexProperty(instance, member); @@ -31,9 +36,13 @@ namespace Perspex.Markup.Xaml.Context // 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)); + var convertedValue = default(object); + + if (CommonValueConversion.TryConvert(value, xamlType, context, out convertedValue)) + { + SetClrProperty(instance, member, convertedValue); + } } else { diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/BitmapTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/BitmapTypeConverter.cs index cf3da35855..3f908aa2ce 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/BitmapTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/BitmapTypeConverter.cs @@ -11,17 +11,17 @@ namespace Perspex.Markup.Xaml.Converters { public class BitmapTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { var uri = new Uri((string)value, UriKind.RelativeOrAbsolute); var scheme = uri.IsAbsoluteUri ? uri.Scheme : "file"; @@ -36,7 +36,7 @@ namespace Perspex.Markup.Xaml.Converters } } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/BrushTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/BrushTypeConverter.cs index d31273b99f..b463143840 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/BrushTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/BrushTypeConverter.cs @@ -10,22 +10,22 @@ namespace Perspex.Markup.Xaml.Converters { public class BrushTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return Brush.Parse((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/ClassesTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/ClassesTypeConverter.cs index 744c8f4a8c..8d32c30369 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/ClassesTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/ClassesTypeConverter.cs @@ -11,22 +11,22 @@ namespace Perspex.Markup.Xaml.Converters { public class ClassesTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return new Classes(((string)value).Split(' ')); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/ColorTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/ColorTypeConverter.cs index 0f06bc3f59..a780bf0b14 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/ColorTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/ColorTypeConverter.cs @@ -10,22 +10,22 @@ namespace Perspex.Markup.Xaml.Converters { public class ColorTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return Color.Parse((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs index 4471a5e6ac..e82e50b96a 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/ColumnDefinitionsTypeConverter.cs @@ -10,22 +10,22 @@ namespace Perspex.Markup.Xaml.Converters { public class ColumnDefinitionsTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return new ColumnDefinitions((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/CursorTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/CursorTypeConverter.cs index a6fba6bfab..86eeb8067c 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/CursorTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/CursorTypeConverter.cs @@ -12,23 +12,23 @@ namespace Perspex.Markup.Xaml.Converters { public class CursorTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { var cursor = (StandardCursorType)Enum.Parse(typeof (StandardCursorType), ((string) value).Trim(), true); return new Cursor(cursor); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/GeometryTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/GeometryTypeConverter.cs index c28dcd1573..7035bb07cb 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/GeometryTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/GeometryTypeConverter.cs @@ -7,22 +7,22 @@ namespace Perspex.Markup.Xaml.Converters public class GeometryTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return StreamGeometry.Parse((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs index 8d9dbdf3e6..df1eb29711 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/GridLengthTypeConverter.cs @@ -10,22 +10,22 @@ namespace Perspex.Markup.Xaml.Converters { public class GridLengthTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return GridLength.Parse((string)value, culture); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/KeyGestureConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/KeyGestureConverter.cs index 6e451fcf86..f631d7a740 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/KeyGestureConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/KeyGestureConverter.cs @@ -7,22 +7,22 @@ namespace Perspex.Markup.Xaml.Converters { class KeyGestureConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return KeyGesture.Parse((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs index 336a114de5..367a5f299f 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/MemberSelectorTypeConverter.cs @@ -10,17 +10,17 @@ namespace Perspex.Markup.Xaml.Converters { public class MemberSelectorTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return new MemberSelector { @@ -28,7 +28,7 @@ namespace Perspex.Markup.Xaml.Converters }; } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs index 7c4568842b..ab72c85d8f 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs @@ -12,17 +12,17 @@ namespace Perspex.Markup.Xaml.Converters { public class PerspexListTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { var result = new PerspexList(); var values = ((string)value).Split(','); @@ -44,7 +44,7 @@ namespace Perspex.Markup.Xaml.Converters return result; } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/PerspexPropertyTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/PerspexPropertyTypeConverter.cs index 520f8aa347..4df886cbf1 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/PerspexPropertyTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/PerspexPropertyTypeConverter.cs @@ -12,17 +12,17 @@ namespace Perspex.Markup.Xaml.Converters { public class PerspexPropertyTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { var s = (string)value; @@ -68,7 +68,7 @@ namespace Perspex.Markup.Xaml.Converters return property; } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/PointTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/PointTypeConverter.cs index 8936175270..6ca3f316f1 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/PointTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/PointTypeConverter.cs @@ -9,22 +9,22 @@ namespace Perspex.Markup.Xaml.Converters { public class PointTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return Point.Parse((string)value, culture); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs index 932291276f..ccb893b0aa 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/PointsListTypeConverter.cs @@ -10,17 +10,17 @@ namespace Perspex.Markup.Xaml.Converters { public class PointsListTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { string strValue = (string)value; string[] pointStrs = strValue.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); @@ -32,7 +32,7 @@ namespace Perspex.Markup.Xaml.Converters return result; } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/RelativePointTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/RelativePointTypeConverter.cs index b6e273ada0..e93dcdaabc 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/RelativePointTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/RelativePointTypeConverter.cs @@ -9,22 +9,22 @@ namespace Perspex.Markup.Xaml.Converters { public class RelativePointTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return RelativePoint.Parse((string)value, culture); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/RelativeRectTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/RelativeRectTypeConverter.cs index e73857382b..58d8f88d40 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/RelativeRectTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/RelativeRectTypeConverter.cs @@ -9,22 +9,22 @@ namespace Perspex.Markup.Xaml.Converters { public class RelativeRectTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return RelativeRect.Parse((string)value, culture); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs index b72a24c023..ea05eedc51 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/RowDefinitionsTypeConverter.cs @@ -10,22 +10,22 @@ namespace Perspex.Markup.Xaml.Converters { public class RowDefinitionsTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return new RowDefinitions((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/SelectorTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/SelectorTypeConverter.cs index 3fb3877cbe..f9fe83bb0b 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/SelectorTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/SelectorTypeConverter.cs @@ -10,23 +10,23 @@ namespace Perspex.Markup.Xaml.Converters { public class SelectorTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { var parser = new SelectorParser((t, ns) => context.TypeRepository.GetByPrefix(ns ?? "", t).UnderlyingType); return parser.Parse((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/ThicknessTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/ThicknessTypeConverter.cs index d819168ad3..5f2239a18c 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/ThicknessTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/ThicknessTypeConverter.cs @@ -9,22 +9,22 @@ namespace Perspex.Markup.Xaml.Converters { public class ThicknessTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return Thickness.Parse((string)value, culture); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/TimeSpanTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/TimeSpanTypeConverter.cs index b0c70e6d77..c1663454a5 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/TimeSpanTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/TimeSpanTypeConverter.cs @@ -10,17 +10,17 @@ namespace Perspex.Markup.Xaml.Converters { public class TimeSpanTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { var valueStr = (string)value; if (!valueStr.Contains(":")) @@ -33,7 +33,7 @@ namespace Perspex.Markup.Xaml.Converters return TimeSpan.Parse(valueStr); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/UriTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/UriTypeConverter.cs index 4575f75995..6447d6fedc 100644 --- a/src/Markup/Perspex.Markup.Xaml/Converters/UriTypeConverter.cs +++ b/src/Markup/Perspex.Markup.Xaml/Converters/UriTypeConverter.cs @@ -9,22 +9,22 @@ namespace Perspex.Markup.Xaml.Converters { public class UriTypeConverter : ITypeConverter { - public bool CanConvertFrom(ITypeConverterContext context, Type sourceType) + public bool CanConvertFrom(IValueContext context, Type sourceType) { return sourceType == typeof(string); } - public bool CanConvertTo(ITypeConverterContext context, Type destinationType) + public bool CanConvertTo(IValueContext context, Type destinationType) { return false; } - public object ConvertFrom(ITypeConverterContext context, CultureInfo culture, object value) + public object ConvertFrom(IValueContext context, CultureInfo culture, object value) { return new Uri((string)value); } - public object ConvertTo(ITypeConverterContext context, CultureInfo culture, object value, Type destinationType) + public object ConvertTo(IValueContext context, CultureInfo culture, object value, Type destinationType) { throw new NotImplementedException(); } diff --git a/src/Markup/Perspex.Markup.Xaml/OmniXAML b/src/Markup/Perspex.Markup.Xaml/OmniXAML index 5209a3f262..307361d65a 160000 --- a/src/Markup/Perspex.Markup.Xaml/OmniXAML +++ b/src/Markup/Perspex.Markup.Xaml/OmniXAML @@ -1 +1 @@ -Subproject commit 5209a3f26268fc55b82fbf8a05fbedce160e230f +Subproject commit 307361d65a187d404da1d4e15a553d918c3ed79c diff --git a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj index 984762d50f..6e6ab30182 100644 --- a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj +++ b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj @@ -166,9 +166,9 @@ + - @@ -212,17 +212,18 @@ - + - + + diff --git a/src/Markup/Perspex.Markup.Xaml/Templates/TemplateContent.cs b/src/Markup/Perspex.Markup.Xaml/Templates/TemplateContent.cs index 3861fc8992..f9f7aef0f2 100644 --- a/src/Markup/Perspex.Markup.Xaml/Templates/TemplateContent.cs +++ b/src/Markup/Perspex.Markup.Xaml/Templates/TemplateContent.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using OmniXaml; +using OmniXaml.ObjectAssembler; using Perspex.Controls; using Perspex.Markup.Xaml.Context; @@ -21,7 +22,9 @@ namespace Perspex.Markup.Xaml.Templates public Control Load() { - var assembler = new PerspexObjectAssembler(runtimeTypeSource); + var assembler = new PerspexObjectAssembler( + runtimeTypeSource, + new TopDownValueContext()); foreach (var xamlNode in nodes) { diff --git a/tests/Perspex.Markup.Xaml.UnitTests/Converters/PerspexPropertyConverterTest.cs b/tests/Perspex.Markup.Xaml.UnitTests/Converters/PerspexPropertyConverterTest.cs index 6e3dffdce9..b25542de0c 100644 --- a/tests/Perspex.Markup.Xaml.UnitTests/Converters/PerspexPropertyConverterTest.cs +++ b/tests/Perspex.Markup.Xaml.UnitTests/Converters/PerspexPropertyConverterTest.cs @@ -56,9 +56,9 @@ namespace Perspex.Markup.Xaml.UnitTests.Converters Assert.Equal(AttachedOwner.AttachedProperty, result); } - private ITypeConverterContext CreateContext(Style style = null) + private IValueContext CreateContext(Style style = null) { - var context = new Mock(); + var context = new Mock(); var topDownValueContext = new Mock(); var typeRepository = new Mock(); var featureProvider = new Mock();