custom BindableProperty of HeightRequest для моего настраиваемого элемента управления в xamarin.forms

Я создал один настраиваемый элемент управления для wrappanel. Но он показывает лишнее пространство. поэтому я пытаюсь создать BindableProperty of HeightRequest для управления и установить его в соответствии с содержимым, чтобы удалить лишнее пространство.

вот как я создал BindableProperty of HeightRequest

    public double HeightRequest { get; set; }

    private static BindableProperty heightTextProperty = BindableProperty.Create(
                                                     propertyName: "HeightRequest",
                                                     returnType: typeof(double),
                                                     declaringType: typeof(InstallationPhotoWrappanel),
                                                     defaultValue: 100,
                                                     defaultBindingMode: BindingMode.TwoWay,
                                                     propertyChanged: heightTextPropertyChanged);

    private static void heightTextPropertyChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var control = (InstallationPhotoWrappanel)bindable;
        control.HeightRequest = Convert.ToDouble(newValue);
    }

но это дает мне исключение

exception has been thrown by the target of an invocation

что я здесь делаю не так. пожалуйста, помогите.

Заранее спасибо.


person Neelam Prajapati    schedule 22.09.2017    source источник


Ответы (2)


У вашего настраиваемого элемента управления уже должно быть свойство HeightRequest. Я предполагаю, что вы создаете настраиваемое привязываемое свойство с именем HeightText.

Если это так, то в коде я вижу три проблемы:

  1. propertyName: "HeightRequest" должно быть propertyName: "HeightText"

  2. Чтобы исключить случаи несоответствия типа целевого свойства, измените defaultValue: 100 на defaultValue: (double)100

  3. И добавьте свойство HeightText, используя GetValue и SetValue

    public double HeightText
    {
        get
        {
            return (double)GetValue(HeightTextProperty);
        }
        set
        {
            SetValue(HeightTextProperty, value);
        }
    }
    
person Sharada Gururaj    schedule 22.09.2017
comment
Я не указывал явно свое значение по умолчанию, поэтому оно оценивалось как int. Спасибо - person lyndon hughey; 30.04.2020

Пожалуйста, посмотрите код ниже и попробуйте его. Надеюсь, это вам поможет.

Код

public static readonly BindableProperty HeightRequestProperty =
    BindableProperty.Create<InstallationPhotoWrappanel,double>(i=>i.HeightRequest,100,BindingMode.TwoWay,heightTextPropertyChanged);

public double HeightRequest
{
    get
    {
        return (double)GetValue(HeightRequestProperty);
    }
    set
    {
        SetValue(HeightRequestProperty, value);
    }
}

static bool heightTextPropertyChanged(BindableObject bindable, double value)
{
    var control = (InstallationPhotoWrappanel)bindable;
    control.HeightRequest = value;
    return true;
}
person Pavan V Parekh    schedule 22.09.2017