2016-08-03 6 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

바인딩하는 경우 (VM 사용) TextChanged Event을 사용하면 의 Entry에 바인딩 할 수 있습니다.

모든 텍스트 변경시 데이터베이스를 쿼리해야한다고 했으므로 주 스레드 (UI 스레드)가 차단되지 않도록 Async 메서드로 실행해야합니다. 결과를 가져 오면 Device.BeginInvokeOnMainThread 메서드를 사용하여 UI 스레드에서 필요한 변경을 수행하여 UI를 업데이트 할 수 있습니다.

예 :

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

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