2016-08-03 16 views
0

Ich habe dieses Eingabefeld, in dem der Benutzer die Daten eingeben und dann möchte ich jedes Mal erfassen den Text ändern und dann wird die Datenbank abfragen, wenn es eine Übereinstimmung der Daten von dem, was der Benutzer eingegeben hat und dann die Ergebnisse anzeigen.Wie erfassen Sie jede Änderung im Eingabefeld?

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

Diese Linien die Benutzereingabe der Text:

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

Wie werde ich den Text jedes Mal, erfassen sie sich ändert? Wie zeige ich an, wenn es danach ein Ergebnis gibt? Ich habe das TextChanged Event vorbereitet, aber ich bin nicht sicher, wie es zu verwenden ist. Gilt es für dieses Szenario? Vielen Dank im Voraus für die Hilfe.

+1

Können Sie bitte die XAML entfernen, die nicht relevant für die Frage ist, so dass es Menschen hilft, die zu beantworten versuchen. –

Antwort

1

Check out MVVM Ansatz, verwenden Sie eine Bindung für die Eingabe Text-Eigenschaft, dann Sie Regel!

1

Sie können an die Text property von Entry binden, wenn Sie Binding sind (mit einer VM), oder Sie können die TextChanged Event verwenden.

Da Sie gesagt haben, dass Sie die Datenbank bei jeder Textänderung abfragen müssen, stellen Sie sicher, dass Sie sie als Async Methode ausführen, um sicherzustellen, dass Ihr Haupt-Thread (UI-Thread) nicht blockiert ist. Sobald Sie die Ergebnisse abgerufen haben, können Sie Ihre Benutzeroberfläche aktualisieren, indem Sie mithilfe der Methode Device.BeginInvokeOnMainThread die erforderlichen Änderungen vom UI-Thread vornehmen.

ZB:

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

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