Можно ли определить, было ли изменение текста в записи из кода или из пользовательского интерфейса? - PullRequest
2 голосов
/ 06 января 2020

Я работаю над проектом Xamarin и мне нужно иметь возможность определить, происходят ли изменения в тексте в представлении Entry из кода или из пользовательского интерфейса, возможно ли это в Xamarin ? или есть известная работа вокруг, чтобы сделать это.

Я знаю о событии OnTextChanged, но это только говорит о том, что свойство Text изменилось, и дает вам доступ к старому и новому значению свойства Text. Он не различает различные причины изменения текста.

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Вы можете получить представление о этой теме , проверьте, сфокусирована ли запись на различии причин изменения текста:

public MainPage()
{
    InitializeComponent();

    myEntry.TextChanged += MyEntry_TextChanged;
}

private void MyEntry_TextChanged(object sender, TextChangedEventArgs e)
{
    var entry = sender as Entry;
    if (entry.IsFocused)
    {
        //change from UI
        Console.WriteLine("change from UI");
    }
    else{
        //change from code
        Console.WriteLine("change from code");
    }
}

Обновление : лучший способ решения проблемы оп:

Вы можете установить флаг самостоятельно, который скажет вашему коду игнорировать событие. Например:

private bool ignoreTextChanged;

private void textNazwa_TextCanged(object sender, EventArgs e)
{
    if (ignoreTextChanged) return;
}

Создайте метод и используйте его для установки текста вместо простого вызова Text = "..."; ::

private void SetTextBoxText(TextBox box, string text)
{
    ignoreTextChanged = true;

    box.Text = text;

    ignoreTextChanged = false;
}

См .: ignoreTextChanged

0 голосов
/ 07 января 2020

вы можете использовать EntryRenderer для обнаружения события нажатия клавиши и использовать этот флаг для обнаружения изменения по коду или пользовательскому интерфейсу.

Вот шаг: - Расширьте свой элемент управления вводом новым событием OnTextChangeByUI - Напишите пользовательский рендер для обе платформы

например для android это будет примерно так

public class ExtendedEntryRender : EntryRenderer
    {
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (Control != null)
            {
                Control.KeyPress += ((Entry)Element).OnTextChangeByUI;


            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...