Как установить значение привязки в качестве параметра поведения в формах Xamarin?
Когда я делаю это, я получаю:
Ошибка. Не найдено ни свойства, ни привязываемого свойства, ни события для «InputValue», ни несоответствующего типа между значением и свойством.
XAML:
<Label Grid.Column="0" x:Name="player" FontSize="Small" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"
Text="{Binding FormattedName}" >
<Label.Behaviors>
<local:ColorTextLabelBehavior MaxInputValue="100" MinInputValue="0" InputValue="{Binding Happiness}" />
</Label.Behaviors>
</Label>
C #:
public class ColorTextLabelBehavior : Behavior<Label>
{
public static readonly BindableProperty MaxValue = BindableProperty.Create("MaxValue", typeof(int), typeof(ColorTextLabelBehavior), defaultValue: 100);
public static readonly BindableProperty MinValue = BindableProperty.Create("MinValue", typeof(int), typeof(ColorTextLabelBehavior), defaultValue: 0);
public static readonly BindableProperty ActualValue = BindableProperty.Create("ActualValue", typeof(int), typeof(ColorTextLabelBehavior), defaultValue: 100);
public int MaxInputValue
{
get { return (int)GetValue(MaxValue); }
set { SetValue(MaxValue, value); }
}
public int MinInputValue
{
get { return (int)GetValue(MinValue); }
set { SetValue(MinValue, value); }
}
public int InputValue
{
get { return (int)GetValue(ActualValue); }
set { SetValue(ActualValue, value); }
}
void HandleTextChanged(object sender, PropertyChangedEventArgs e)
{
try
{
float percent = ((float)InputValue - (float)MinInputValue) / ((float)MaxInputValue - (float)MinInputValue);
double resultRed = Color.Red.R + percent * (Color.Green.R - Color.Red.R);
double resultGreen = Color.Red.G + percent * (Color.Green.G - Color.Red.G);
double resultBlue = Color.Red.B + percent * (Color.Green.B - Color.Red.B);
((Label)sender).TextColor = new Color(resultRed, resultGreen, resultBlue);
}
catch (Exception)
{
}
}
protected override void OnAttachedTo(BindableObject bindable)
{
bindable.PropertyChanged += HandleTextChanged;
}
protected override void OnDetachingFrom(BindableObject bindable)
{
bindable.PropertyChanged += HandleTextChanged;
}
}
Если я жестко закодирую значение для 'InputValue', это работает, но я хочу иметь возможность отправить привязку, чтобы она автоматически окрашивала текст.
Обратите внимание, что это список, если это имеет значение.
Пожалуйста, помогите, я застрял на этом и не могу найти ответы.
Я открыт для других альтернатив реализации этого.
Спасибо !!