Xamarin.Forms:使用类型转换器将枚举参数传递到 URL

问题描述 投票:0回答:1

在我的页面中,我有一个枚举类型的绑定属性:

[QueryProperty(nameof(EnumProp), nameof(EnumProp))]
public partial class MyPage : ContentPage
{
    public static readonly BindableProperty EnumPropProperty =
       BindableProperty.Create(nameof(EnumProp), typeof(MyEnum), typeof(MyPage), propertyChanged: OnEnumPropChanged);

    public MyEnum EnumProp
    {
        get => (MyEnum)GetValue(EnumPropProperty);
        set => SetValue(EnumPropProperty, value);
    }

我想通过

GoToAsync
调用此页面:

        MyEnum enumProp = MyEnum.ThisValue;
        string dest = $"{nameof(MyPage)}?{nameof(MyPage.EnumProp)}={enumProp}";
        await Shell.Current.GoToAsync(dest);

在我的示例中,

dest
"MyPage?EnumProp=ThisValue"
并且
GoToAsync
抛出
InvalidCastException

所以我向属性 EnumProp 添加了一个 TypeConverter:

    [TypeConverter(typeof(StringToEnumConverter<MyEnum>))]
    public MyEnum EnumProp

首先我实现了源自

StringToEnumConverter<T>
Xamarin.Forms.TypeConverter
,然后实现了接口
IValueConverter
。 在这两种情况下都会抛出
InvalidCastException

我的情况该怎么办?

xamarin.forms data-binding enums typeconverter
1个回答
0
投票

可以将数据转换为字符串类型并通过。

请参考以下代码:

[QueryProperty(nameof(EnumProp), nameof(EnumProp))]
public partial class MyPage : ContentPage
{

    public MyPage()
    {
        InitializeComponent();
    }

    public string EnumProp
    {
        set
        {
            LoadData(value);
        }
    }

    private void LoadData(string value)
    {
        System.Diagnostics.Debug.WriteLine("the passed data is " + value);

        Title = "---> "+value;
    }
 }

然后可以按如下方式传递数据:

  MyEnum enumProp = MyEnum.Spring;

 await Shell.Current.GoToAsync($"mypage?EnumProp={enumProp.ToString()}");  

注意

1.字符串

mypage
是页面
MyPage

的路径
        Routes.Add("mypage", typeof(MyPage));

2.

MyEnum.cs
的代码是:

public enum MyEnum
{
    Spring,
    Summer,
    Autumn,
    Winter
}
© www.soinside.com 2019 - 2024. All rights reserved.