Xamarin Forms-如何在选择器中获取所选项目?

时间:2018-11-27 11:24:16

标签: xamarin xamarin.forms

我有一个选择器。我需要获取 ProvinceID ,我尝试使用下面的代码获取 ProvinceID 。但是我无法获得省ID 。我只能在选择器内找到文本,即省名。如何获取 ProvinceID ItemsSource ItemDisplayBinding 有什么区别?

  

codePicker.ItemsSource [codePicker.SelectedIndex] .ToString()-我尝试使用此代码来查看是否可以获取ProvinceID。

  样本数据:
  :Nueva Ecija-这是选择器显示的内容
  省份:NE210-这就是我需要的

<local:CustomPicker x:Name="provincePicker" SelectedIndexChanged="provincePicker_SelectedIndexChanged" Unfocused="provincePicker_Unfocused" SelectedItem="{Binding DisplayText}" ItemsSource="{Binding ProvinceID}" ItemDisplayBinding="{Binding DisplayText}" StyleClass="fieldForm" IsEnabled="True">
    <local:CustomPicker.FontFamily>
         <OnPlatform x:TypeArguments="x:String">
             <On Platform="Android" Value="HelveticaNeueLTPro-Lt.otf#HelveticaNeueLTPro-Lt"/>
         </OnPlatform>
    </local:CustomPicker.FontFamily>
</local:CustomPicker>

var getCode = conn.QueryAsync<RetailerGroupTable>("SELECT * FROM tblRetailerGroup WHERE RetailerCode=?", code);
var resultCount = getCode.Result.Count;

if (resultCount > 0)
{
   for (int i = 0; i < resultCount; i++)
   {
       var result = getCode.Result[i];
       provincePicker.SelectedItem = result.ProvinceID;
   }
}

1 个答案:

答案 0 :(得分:1)

实际上,您需要做的很简单:

  • 获取选择器的选定项目,如下所示;

    var selectedItem = provincePicker.SelectedItem as RetailerGroupTable;
    var provinceId= selectedItem.ProvinceId;
    
  • 我还建议您在选择器中订阅SelectedIndexChanged事件,以使您知道选择器选择有所变化,这可以通过两种方式完成:

    XAML

    <Picker SelectedIndexChanged="Picker_SelectedIndexChanged">
    

    C#

    provincePicker.SelectedIndexChanged+=Picker_SelectedIndexChanged;
    
  

ItemsSource和ItemDisplayBinding有什么区别?

根据Xamarin文档

  类型为ItemsSource

IList是要显示的项目的源列表,默认为null。而绑定到对象列表时,必须告诉Picker从每个对象显示哪个属性。这是通过将ItemDisplayBinding属性设置为每个对象的必需属性来实现的。

评论:

ItemsSource是一个IList,因此有一个Enumerator,它的工作原理是跟踪您在项目列表中有多少个项目,从而创建了很多位置另一方面,ItemDisplayBinding与这些事情无关,它只是告诉您的Picker我希望当我的{ {1}}依次准备就绪。

我希望我有道理,如有查询,请还原。

更新

XAML

Picker

C#

<local:CustomPicker x:Name="provincePicker" SelectedIndexChanged="provincePicker_SelectedIndexChanged" Unfocused="provincePicker_Unfocused" ItemsSource="{Binding ProvinceID}" ItemDisplayBinding="{Binding DisplayText}" StyleClass="fieldForm" IsEnabled="True">
<local:CustomPicker.FontFamily>
     <OnPlatform x:TypeArguments="x:String">
         <On Platform="Android" Value="HelveticaNeueLTPro-Lt.otf#HelveticaNeueLTPro-Lt"/>
     </OnPlatform>
</local:CustomPicker.FontFamily>