如何捕获Entry字段中的每个更改?

时间:2016-08-03 02:13:21

标签: xamarin xamarin.forms onchange textchanged

我有这个输入字段,用户将输入数据,然后我想在每次文本更改时捕获,然后查询数据库是否有来自用户输入的数据匹配然后显示结果。

             <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事件,但我不确定如何使用它。它适用于这种情况吗?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

检查MVVM方法,对条目文本属性使用绑定,然后进行规则!

答案 1 :(得分:1)

如果您绑定(使用VM),则可以绑定到Text property Entry,否则您可以使用TextChanged Event

由于您说您需要在每次文本更改时查询数据库,请确保将其作为Async方法运行,以确保未阻止主线程(UI线程)。获取结果后,您可以通过使用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";
    });
}