diff --git a/samples/XamlTestApplicationPcl/TreeViewItem.paml b/samples/XamlTestApplicationPcl/TreeViewItem.paml index 28ebcb39fa..d7063eeba8 100644 --- a/samples/XamlTestApplicationPcl/TreeViewItem.paml +++ b/samples/XamlTestApplicationPcl/TreeViewItem.paml @@ -16,12 +16,12 @@ Content="{TemplateBinding Header}" Margin="{TemplateBinding Padding}"/> - + Grid.Column="1"/> ), new PerspexListTypeConverter()), new TypeConverterRegistration(typeof(IMemberSelector), new MemberSelectorTypeConverter()), new TypeConverterRegistration(typeof(Point), new PointTypeConverter()), new TypeConverterRegistration(typeof(PerspexProperty), new PerspexPropertyTypeConverter()), diff --git a/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs b/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs new file mode 100644 index 0000000000..9186b91ab9 --- /dev/null +++ b/src/Markup/Perspex.Markup.Xaml/Converters/PerspexListTypeConverter.cs @@ -0,0 +1,52 @@ +// Copyright (c) The Perspex Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using System; +using System.Globalization; +using System.Linq; +using OmniXaml.TypeConversion; +using Perspex.Collections; +using Perspex.Utilities; + +namespace Perspex.Markup.Xaml.Converters +{ + public class PerspexListTypeConverter : ITypeConverter + { + public bool CanConvertFrom(IXamlTypeConverterContext context, Type sourceType) + { + return sourceType == typeof(string); + } + + public bool CanConvertTo(IXamlTypeConverterContext context, Type destinationType) + { + return false; + } + + public object ConvertFrom(IXamlTypeConverterContext context, CultureInfo culture, object value) + { + var result = new PerspexList(); + var values = ((string)value).Split(','); + + foreach (var s in values) + { + object v; + + if (TypeUtilities.TryConvert(typeof(T), s, culture, out v)) + { + result.Add((T)v); + } + else + { + throw new InvalidCastException($"Could not convert '{s}' to {typeof(T)}."); + } + } + + return result; + } + + public object ConvertTo(IXamlTypeConverterContext context, CultureInfo culture, object value, Type destinationType) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj index 600e3c4fb3..c010099026 100644 --- a/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj +++ b/src/Markup/Perspex.Markup.Xaml/Perspex.Markup.Xaml.csproj @@ -38,6 +38,7 @@ Properties\SharedAssemblyInfo.cs +