0

我有一个这样的自定义控件:

<controls:CustomControl Value=".8" MaxValue=".7"/>

这是Value可绑定的属性:

public static readonly BindableProperty ValueProperty =
            BindableProperty.Create(nameof(Value), typeof(double), typeof(CustomControl), 2d,
                coerceValue: (bindable, value) =>
                 ((double)value).Clamp(0.05d, ((CustomControl)bindable).MaxValue));

问题是它仅在Value更改时才被评估,这不起作用:

<controls:CustomControl Value=".8" MaxValue=".7"/>

但这将:

<controls:CustomControl MaxValue=".7" Value=".8"/>

coerceValue当另一个属性发生变化时(即在它的 中),没有办法执行propertyChanged吗?

4

1 回答 1

0

问题是它仅在值更改时才被评估,这不起作用:

这是一个预期的结果。该方法Clamp将返回限制在最小值和最大值范围内的值。

template<class T>
T Clamp(T x, T min, T max)
{
    if (x > max)
        return max;
    if (x < min)
        return min;
    return x;
}

当你设置Value为 0.7 和MaxValue0.8 时,因为 0.7 大于 0.05 小于 0.8 ,所以它会返回自己(0.7)。并且永远不会调用 propertyChanged 方法。

当您设置Value为 0.8 和MaxValue0.7 时,它将返回 0.8。并且方法 propertyChanged 将被调用。

于 2019-09-23T11:56:04.253 回答