как использовать элемент управления «text.changed» из кода с использованием MVVM (в Xamarin.Forms) - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь заставить текстовое поле изменить свой цвет, когда текст записи удовлетворяет некоторым требованиям, вызывая функцию из моей ViewModel каждый раз, когда в текст добавляется новый символ, и я использую FreshMVVM, что означает, что я не могу напрямую используйте элемент управления «text.changed», поскольку привязки нельзя использовать для элементов управления (если я не ошибаюсь).

Поиск ответов Я обнаружил пакет слепков «Поведения. Формы», который позволил бы мне сделай это. Проблема в том, что я не использую запись как таковую, а настраиваемое представление, которое работает как запись, и ранее упомянутый пакет не позволяет мне использовать entry.behaviors для моей настраиваемой записи.

Большинство из Сообщения и обсуждения по этому вопросу были старыми (с 2016 или 2017 года), так есть ли способ привязать элементы управления к вашей ViewModel сейчас? И если нет, то есть ли способ выполнить конкретную задачу c, которую я объяснил?

Спасибо всем за потраченное время, надеюсь, вам удачного дня.

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете использовать Поведения, Они используются для улучшения функциональности элемента управления. эта ссылка: https://xamarinhelp.com/xamarin-forms-triggers-behaviors-effects/: обсуждается аналогичный вариант использования, который вы ищете.

ваш код должен выглядеть примерно так:

public class DoSomethingOnTextChanged: Behavior<>
{

    protected override void OnAttachedTo(Entry bindable)
    {
        bindable.TextChanged += bindable_TextChanged;
    }

    private void bindable_TextChanged(object sender, TextChangedEventArgs e)
    {
       var newTextValue = (string)e.NewTextValue;
       //Do Some Logic
    }

    protected override void OnDetachingFrom(Entry bindable)
    {
        bindable.TextChanged -= bindable_TextChanged;
    }
}
1 голос
/ 17 февраля 2020

Вы можете попробовать триггеры, как показано в примере ниже

<Entry Placeholder="Insert your name"
        BackgroundColor="LightCoral" >
      <Entry.Triggers>
          <Trigger TargetType="Entry"
                   Property="Text" 
                   Value="Charlin">
              <Setter Property="BackgroundColor" Value="LightBlue" />
              <Setter Property="Scale" Value="1.1" />
          </Trigger>
      </Entry.Triggers>
 </Entry>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...