Combine TypeConverters and IValueConverters

This commit is contained in:
ClemensFischer 2025-08-19 13:14:08 +02:00
parent 12d13465e9
commit 4b60e7dde5
5 changed files with 64 additions and 77 deletions

View file

@ -4,6 +4,7 @@ global using Avalonia.Animation.Easings;
global using Avalonia.Controls;
global using Avalonia.Controls.Documents;
global using Avalonia.Data;
global using Avalonia.Data.Converters;
global using Avalonia.Input;
global using Avalonia.Interactivity;
global using Avalonia.Media;

View file

@ -1,10 +1,22 @@
using System;
using System.ComponentModel;
using System.Globalization;
#if WPF
using System.Windows.Data;
#elif UWP
using Windows.UI.Xaml.Data;
#elif WINUI
using Microsoft.UI.Xaml.Data;
#endif
#if UWP || WINUI
using ConverterCulture = System.String;
#else
using ConverterCulture = System.Globalization.CultureInfo;
#endif
namespace MapControl
{
public class LocationConverter : TypeConverter
public class LocationConverter : TypeConverter, IValueConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
@ -13,11 +25,21 @@ namespace MapControl
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return Location.Parse((string)value);
return Location.Parse(value.ToString());
}
public object Convert(object value, Type targetType, object parameter, ConverterCulture culture)
{
return Location.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, ConverterCulture culture)
{
return value.ToString();
}
}
public class LocationCollectionConverter : TypeConverter
public class LocationCollectionConverter : TypeConverter, IValueConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
@ -26,11 +48,21 @@ namespace MapControl
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return LocationCollection.Parse((string)value);
return LocationCollection.Parse(value.ToString());
}
public object Convert(object value, Type targetType, object parameter, ConverterCulture culture)
{
return LocationCollection.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, ConverterCulture culture)
{
return value.ToString();
}
}
public class BoundingBoxConverter : TypeConverter
public class BoundingBoxConverter : TypeConverter, IValueConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
@ -39,11 +71,21 @@ namespace MapControl
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return BoundingBox.Parse((string)value);
return BoundingBox.Parse(value.ToString());
}
public object Convert(object value, Type targetType, object parameter, ConverterCulture culture)
{
return BoundingBox.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, ConverterCulture culture)
{
return value.ToString();
}
}
public class TileSourceConverter : TypeConverter
public class TileSourceConverter : TypeConverter, IValueConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
@ -52,7 +94,17 @@ namespace MapControl
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return TileSource.Parse((string)value);
return TileSource.Parse(value.ToString());
}
public object Convert(object value, Type targetType, object parameter, ConverterCulture culture)
{
return TileSource.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, ConverterCulture culture)
{
return value.ToString();
}
}
}

View file

@ -188,6 +188,9 @@
<Compile Include="..\Shared\TransverseMercatorProjection.cs">
<Link>TransverseMercatorProjection.cs</Link>
</Compile>
<Compile Include="..\Shared\TypeConverters.cs">
<Link>TypeConverters.cs</Link>
</Compile>
<Compile Include="..\Shared\ViewportChangedEventArgs.cs">
<Link>ViewportChangedEventArgs.cs</Link>
</Compile>
@ -278,9 +281,6 @@
<Compile Include="..\WinUI\Tile.WinUI.cs">
<Link>Tile.WinUI.cs</Link>
</Compile>
<Compile Include="..\WinUI\ValueConverters.cs">
<Link>ValueConverters.cs</Link>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TileImageLoader.UWP.cs" />
<EmbeddedResource Include="Properties\MapControl.UWP.rd.xml" />

View file

@ -17,11 +17,6 @@
</ItemGroup>
<ItemGroup>
<Compile Remove="..\Shared\TypeConverters.cs" />
</ItemGroup>
<ItemGroup>
<!-- Directly referencing "Microsoft.Web.WebView2 is a workaround for a bug in WindowsAppSDK, https://github.com/microsoft/WindowsAppSDK/issues/4807 -->
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250606001" />
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.4948" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="9.0.8" />

View file

@ -1,61 +0,0 @@
using System;
#if UWP
using Windows.UI.Xaml.Data;
#elif WINUI
using Microsoft.UI.Xaml.Data;
#endif
namespace MapControl
{
public class LocationConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return Location.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return value.ToString();
}
}
public class LocationCollectionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return LocationCollection.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return value.ToString();
}
}
public class BoundingBoxConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return BoundingBox.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return value.ToString();
}
}
public class TileSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return TileSource.Parse(value.ToString());
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return value.ToString();
}
}
}