2016-08-03 2 views
0

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

   <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> 

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

+1

Можете ли вы удалить XAML, который не имеет отношения к вопросу, так что он помогает людям, которые пытаются ответить. –

ответ

1

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

1

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

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

Например:

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

    Device.BeginInvokeOnMainThread (() => {    
     // update UI 
     label.Text = "Async operation completed"; 
    }); 
}