Метка запускает привязку Textcolor на основе переключателя - PullRequest
0 голосов
/ 03 марта 2020

Я бы хотел изменить цвет текста с помощью label.datatriggers на основе результата другой функции. Кроме того, как я могу получить доступ к каждой команде, я хочу выполнить действие для каждой нажатой. Где именно я могу добавить эту функцию и как, если я использую модель представления - как получить результат из IsToggle.

if(IsToggle)
{
 //do logic 
} else
{
//do logic 
}

пример

    <Label Text="AUTO" HorizontalOptions="Center"
             VerticalOptions="Center">
              <Label.Behaviors>
               <local:ToggleBehavior x:Name="autoToggleBehavior" IsToggled="{Binding Toggled, Mode=TwoWay}"/>
             </Label.Behaviors>
             <Label.Triggers>
              <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference autoToggleBehavior},Path=IsToggled}" Value="False"

                 <Setter Property="BackgroundColor" Value="White"/>
                 <Setter Property="TextColor" Value="Gray"/> 
               </DataTrigger>
               <DataTrigger TargetType="Label" Binding="{Binding Source={x:Reference autoToggleBehavior},Path=IsToggled}" Value="True"

                <Setter Property="BackgroundColor" Value="Blue"/>
                 <Setter Property="TextColor" Value="White"/> 
               </DataTrigger>
             </Label.Triggers>
     </Label>

Это поведение

public class ToggleBehavior : Behavior<View>
    {
        readonly TapGestureRecognizer tapRecognizer;

        public ToggleBehavior()
        {
            tapRecognizer = new TapGestureRecognizer
            {
                Command = new Command(() => this.IsToggled = !this.IsToggled)
            };


        }

        public static readonly BindableProperty IsToggledProperty = BindableProperty.Create<ToggleBehavior, bool>(tb => tb.IsToggled, false);

        public bool IsToggled
        {
            set { SetValue(IsToggledProperty, value); }
            get { return (bool)GetValue(IsToggledProperty); }
        }

        protected override void OnAttachedTo(View bindable)
        {
            base.OnAttachedTo(bindable);
            bindable.GestureRecognizers.Add(this.tapRecognizer);
        }
        protected override void OnDetachingFrom(View bindable)
        {
            base.OnDetachingFrom(bindable);
            bindable.GestureRecognizers.Remove(this.tapRecognizer);
        }
        protected override void OnAttachedTo(BindableObject bindable)
        {
            base.OnAttachedTo(bindable);
            this.BindingContext = bindable.BindingContext;
            bindable.BindingContextChanged += Bindable_BindingContextChanged;
        }
        protected override void OnDetachingFrom(BindableObject bindable)
        {
            base.OnDetachingFrom(bindable);
            this.BindingContext = null;
            bindable.BindingContextChanged -= Bindable_BindingContextChanged;
        }
        void Bindable_BindingContextChanged(object sender, EventArgs e)
        {
            var bobject = sender as BindableObject;

            this.BindingContext = bobject?.BindingContext;
        }

1 Ответ

0 голосов
/ 04 марта 2020

как получить результат из IsToggle.

Вы можете определить событие propertyChanged из IsToggledProperty

    public static readonly BindableProperty IsToggledProperty = BindableProperty.Create("IsToggled", typeof(bool), typeof(ToggleBehavior), false,propertyChanged: OnIsToggledChanged);

    static void OnIsToggledChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var behavior = bindable as ToggleBehavior;
        bool Toggled = (bool)newValue ;

        if(Toggled)
        {

        }
        else
        {

        }


    }
...