我有一个这样的自定义控件:
<select onchange="changebyteintoselectedValue(123123123)">
<option value="KB">KB</option>
<option value="MB">MB</option>
<option value="GB">GB</option>
<option value="TB">TB</option>
</select>
这是<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
吗?
答案 0 :(得分: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并将MaxValue
设置为0.8时,由于0.7大于0.05且小于0.8,因此它将自行返回(0.7)。而且永远不会调用方法propertyChanged。
将Value
设置为0.8并将MaxValue
设置为0.7时,它将返回0.8。并且方法propertyChanged将被称为。