Как фиксировать каждое изменение в поле ввода?

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

             <StackLayout Grid.Row="0" Grid.Column="0" Padding="16,13,16,9">
                <StackLayout Orientation="Horizontal" Padding="10,0">
                  <StackLayout.GestureRecognizers>
                    <TapGestureRecognizer Tapped="OnTapVINRecognizer"/>
                  </StackLayout.GestureRecognizers>
                  <local:CustomLabel x:Name="VINLabel" Text="VIN" TextColor="#3680a4" Style="{StaticResource AccordTitleStyle}"/>
                  <Image x:Name="VINImage" Source="arrow_down.png"/>
                </StackLayout>
                <StackLayout x:Name="VINAccordion" IsVisible="True" Padding="0,5,0,16" Spacing="10">
                  <StackLayout Spacing="0" Orientation="Horizontal">
                    <local:CustomEntry x:Name="VINText" Placeholder="17 CHARACTERS" HorizontalOptions="FillAndExpand"/>
                  </StackLayout>
                  <local:CustomLabel Style="{StaticResource AccordLabelStyle}">
                    <local:CustomLabel.Text>
                      If the motor has a VIN, enter the VIN. A VIN is the 17 character identifier recorded on most vehicles built after 1998
                    </local:CustomLabel.Text>
                  </local:CustomLabel>
                  <local:CustomButton Clicked="OnClickSearchBtn" ClassId="vin"/>
                </StackLayout>
              </StackLayout>

В этой строке пользователь вводит текст:

  <StackLayout Spacing="0" Orientation="Horizontal">
      <local:CustomEntry x:Name="VINText" Placeholder="17 CHARACTERS" HorizontalOptions="FillAndExpand"/>
  </StackLayout>

Как я буду фиксировать текст каждый раз, когда он меняется? Как я буду отображать, если после этого будет результат? У вас есть готовое событие TextChanged, но я не знаю, как его использовать. Применимо ли это к этому сценарию? Заранее спасибо за помощь.


person Jen143    schedule 03.08.2016    source источник
comment
Не могли бы вы удалить XAML, который не имеет отношения к вопросу, чтобы он помог людям, которые пытаются ответить.   -  person Rohit Vipin Mathews    schedule 03.08.2016


Ответы (2)


Ознакомьтесь с подходом MVVM, используйте привязку для свойства текста записи, тогда вы правите!

person Tolga Kartal    schedule 03.08.2016

Вы можете выполнить привязку к свойству Text элемента Entry, если вы выполняете привязку (используя виртуальную машину), или же вы можете использовать Событие TextChanged.

Поскольку вы сказали, что вам нужно запрашивать базу данных при каждом изменении текста, убедитесь, что вы запускаете ее как Асинхронный метод, чтобы убедиться, что ваш основной поток (поток пользовательского интерфейса) не заблокирован. После получения результатов вы можете обновить свой пользовательский интерфейс, внеся необходимые изменения из потока пользовательского интерфейса, используя Device.BeginInvokeOnMainThread.

Eg :

VINText.TextChanged += async (s,e) => 
{
    //Long running task - query the db
    await FetchResultFromDatabase();

    Device.BeginInvokeOnMainThread (() => {            
        // update UI
        label.Text = "Async operation completed";
    });
}
person Rohit Vipin Mathews    schedule 03.08.2016