- Retrieving selected values in Xamarin SfAutoComplete
- SelectedIndex
- SelectedIndices
- SelectedItem
Contact Support
Handling Selected Items
22 Aug 202224 minutes to read
Retrieving selected values in Xamarin SfAutoComplete
SfAutoComplete
provides a way to handle the selected item using the following properties:
SelectedIndex
You can get or set the index of the selected item using the SelectedIndex
property. It can be applicable only when MultiSelectMode
is None
. SelectedIndex
will accept integer values.
How to set the index of item to be selected
The SelectedIndex
property holds the index of selected item in suggestion list.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:autocomplete="clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms"
xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:local="clr-namespace:AutocompleteSample"
x:Class="AutocompleteSample.MainPage">
<StackLayout VerticalOptions="Start"
HorizontalOptions="Start"
Padding="30">
<autocomplete:SfAutoComplete
x:Name="autoComplete"
HeightRequest="40"
MultiSelectMode="None"
SelectedIndex="1">
<autocomplete:SfAutoComplete.AutoCompleteSource>
<ListCollection:List x:TypeArguments="x:String">
<x:String>Antigua and Barbuda</x:String>
<x:String>American Samoa</x:String>
<x:String>Afghanistan</x:String>
<x:String>Antarctica</x:String>
<x:String>Argentina</x:String>
<x:String>Anguilla</x:String>
<x:String>Albania</x:String>
<x:String>Algeria</x:String>
<x:String>Andorra</x:String>
<x:String>Angola</x:String>
</ListCollection:List>
</autocomplete:SfAutoComplete.AutoCompleteSource>
</autocomplete:SfAutoComplete>
</StackLayout>
</ContentPage>
using Syncfusion.SfAutoComplete.XForms;
using System.Collections.Generic;
using Xamarin.Forms;
namespace AutocompleteSample
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
StackLayout stackLayout = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
Padding = 30
};
SfAutoComplete autoComplete = new SfAutoComplete()
{
HeightRequest = 40,
SelectedIndex = 1,
MultiSelectMode = MultiSelectMode.None,
AutoCompleteSource = new List<string>()
{
"Antigua and Barbuda",
"American Samoa",
"Afghanistan",
"Antarctica",
"Argentina",
"Anguilla",
"Albania",
"Algeria",
"Andorra",
"Angola"
}
};
stackLayout.Children.Add(autoComplete);
this.Content = stackLayout;
}
}
}
Retrieving the index of selected item
When an item is selected from suggestion list, its index can be retrieved using the SelectedIndex
property.
The following code snippet demonstrates the way to retrieve SelectedIndex
and display it in an alert.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:autocomplete="clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms"
xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:local="clr-namespace:AutocompleteSample"
x:Class="AutocompleteSample.MainPage">
<StackLayout VerticalOptions="Start"
HorizontalOptions="Start"
Padding="30">
<autocomplete:SfAutoComplete
x:Name="autoComplete"
HeightRequest="40"
MultiSelectMode="None"
SelectionChanged="autoComplete_SelectionChanged">
<autocomplete:SfAutoComplete.AutoCompleteSource>
<ListCollection:List x:TypeArguments="x:String">
<x:String>Antigua and Barbuda</x:String>
<x:String>American Samoa</x:String>
<x:String>Afghanistan</x:String>
<x:String>Antarctica</x:String>
<x:String>Argentina</x:String>
<x:String>Anguilla</x:String>
<x:String>Albania</x:String>
<x:String>Algeria</x:String>
<x:String>Andorra</x:String>
<x:String>Angola</x:String>
</ListCollection:List>
</autocomplete:SfAutoComplete.AutoCompleteSource>
</autocomplete:SfAutoComplete>
</StackLayout>
</ContentPage>
using Syncfusion.SfAutoComplete.XForms;
using System.Collections.Generic;
using Xamarin.Forms;
namespace AutocompleteSample
{
public partial class MainPage : ContentPage
{
SfAutoComplete autoComplete;
public MainPage()
{
InitializeComponent();
StackLayout stackLayout = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
Padding = 30
};
autoComplete = new SfAutoComplete()
{
HeightRequest = 40,
MultiSelectMode = MultiSelectMode.None,
AutoCompleteSource = new List<string>()
{
"Antigua and Barbuda",
"American Samoa",
"Afghanistan",
"Antarctica",
"Argentina",
"Anguilla",
"Albania",
"Algeria",
"Andorra",
"Angola"
}
};
autoComplete.SelectionChanged += autoComplete_SelectionChanged;
stackLayout.Children.Add(autoComplete);
this.Content = stackLayout;
}
}
}
The following code snippet will handle the event
private void autoComplete_SelectionChanged(object sender, Syncfusion.SfAutoComplete.XForms.SelectionChangedEventArgs e)
{
DisplayAlert("Selection Changed", "SelectedIndex: " + autoComplete.SelectedIndex, "OK");
}
SelectedIndices
You can get or set the indices of the selected items using the SelectedIndices
property. It can be applicable when MultiSelectMode
is in either Token
or Delimiter
. SelectedIndices
will accept collection of integer.
How to set the indices of items
SelectedIndices
property holds the Indices of selected items in suggestion list.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:autocomplete="clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms"
xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:local="clr-namespace:AutocompleteSample"
x:Class="AutocompleteSample.MainPage">
<StackLayout VerticalOptions="Start"
HorizontalOptions="Start"
Padding="30">
<autocomplete:SfAutoComplete
x:Name="autoComplete"
HeightRequest="40"
MultiSelectMode="Token"
SelectedIndices="{Binding SelectedIndices}">
<autocomplete:SfAutoComplete.AutoCompleteSource>
<ListCollection:List x:TypeArguments="x:String">
<x:String>Antigua and Barbuda</x:String>
<x:String>American Samoa</x:String>
<x:String>Afghanistan</x:String>
<x:String>Antarctica</x:String>
<x:String>Argentina</x:String>
<x:String>Anguilla</x:String>
<x:String>Albania</x:String>
<x:String>Algeria</x:String>
<x:String>Andorra</x:String>
<x:String>Angola</x:String>
</ListCollection:List>
</autocomplete:SfAutoComplete.AutoCompleteSource>
</autocomplete:SfAutoComplete>
</StackLayout>
</ContentPage>
using System.Collections.Generic;
using Xamarin.Forms;
namespace AutocompleteSample
{
public partial class MainPage : ContentPage
{
private object selectedIndices;
public object SelectedIndices
{
get { return selectedIndices; }
set { selectedIndices = value; }
}
public MainPage()
{
InitializeComponent();
SelectedIndices = new List<int>() { 2, 4, 7 };
StackLayout stackLayout = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
Padding = new Thickness(30)
};
SfAutoComplete autoComplete = new SfAutoComplete()
{
HeightRequest = 40,
MultiSelectMode = MultiSelectMode.Token,
SelectedIndices = this.SelectedIndices,
AutoCompleteSource = new List<string>()
{
"Antigua and Barbuda",
"American Samoa",
"Afghanistan",
"Antarctica",
"Argentina",
"Anguilla",
"Albania",
"Algeria",
"Andorra",
"Angola"
}
};
stackLayout.Children.Add(autoComplete);
this.Content = stackLayout;
}
}
}
Retrieving the indices of selected item
When an item is selected from suggestion list, its index can be retrieved using the SelectedIndices
property. The property type of SelectedIndices
is an Object. So you need to bind the property to the object type in the TwoWay Binding mode.
The following code snippet demonstrates the way to retrieve SelectedIndices
and display in the ListView.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:autocomplete="clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms"
xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:local="clr-namespace:AutocompleteSample"
x:Class="AutocompleteSample.MainPage">
<StackLayout VerticalOptions="Start"
HorizontalOptions="Start"
Padding="30">
<autocomplete:SfAutoComplete
x:Name="autoComplete"
HeightRequest="40"
SelectedIndices="{Binding SelectedIndices, Mode=TwoWay}"
MultiSelectMode="Token">
<autocomplete:SfAutoComplete.AutoCompleteSource>
<ListCollection:List x:TypeArguments="x:String">
<x:String>Antigua and Barbuda</x:String>
<x:String>American Samoa</x:String>
<x:String>Afghanistan</x:String>
<x:String>Antarctica</x:String>
<x:String>Argentina</x:String>
<x:String>Anguilla</x:String>
<x:String>Albania</x:String>
<x:String>Algeria</x:String>
<x:String>Andorra</x:String>
<x:String>Angola</x:String>
</ListCollection:List>
</autocomplete:SfAutoComplete.AutoCompleteSource>
</autocomplete:SfAutoComplete>
<ListView
x:Name="MainListView"
RowHeight="30"
ItemsSource="{Binding Source={x:Reference autoComplete},Path=SelectedIndices}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Label Text="SelectedIndex:"/>
<Label Text="{Binding}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Xamarin.Forms;
namespace AutocompleteSample
{
public partial class MainPage : ContentPage,INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private object selectedIndices;
public object SelectedIndices
{
get { return selectedIndices; }
set
{
selectedIndices = value;
NotifyPropertyChanged("SelectedIndices");
}
}
public MainPage()
{
InitializeComponent();
StackLayout stackLayout = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
Padding = new Thickness(30)
};
SfAutoComplete autoComplete = new SfAutoComplete()
{
HeightRequest = 40,
MultiSelectMode = MultiSelectMode.Token,
AutoCompleteSource = new List<string>()
{
"Antigua and Barbuda",
"American Samoa",
"Afghanistan",
"Antarctica",
"Argentina",
"Anguilla",
"Albania",
"Algeria",
"Andorra",
"Angola"
}
};
stackLayout.Children.Add(autoComplete);
ListView mainListView = new ListView()
{
RowHeight = 30,
};
Binding itemSource_Binding = new Binding();
itemSource_Binding.Source = autoComplete;
itemSource_Binding.Path = "SelectedIndices";
mainListView.SetBinding(ListView.ItemsSourceProperty, itemSource_Binding);
DataTemplate itemTemplate = new DataTemplate(() =>
{
StackLayout layout = new StackLayout()
{
Orientation = StackOrientation.Horizontal
};
Label nameLabel = new Label();
nameLabel.Text = "SelectedIndex : ";
layout.Children.Add(nameLabel);
Label selectedindexLabel = new Label();
selectedindexLabel.SetBinding(Label.TextProperty,".");
layout.Children.Add(selectedindexLabel);
return new ViewCell { View = layout };
});
mainListView.ItemTemplate = itemTemplate;
stackLayout.Children.Add(mainListView);
this.BindingContext = this;
this.Content = stackLayout;
}
}
}
SelectedItem
The SelectedItem
property is used to select the particular item from the suggestion list. You can either get or set the SelectedItem
.
How to set the SelectedItem
The following code snippet demonstrates the way to set SelectedItem
.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:autocomplete="clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms"
xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:local="clr-namespace:AutocompleteSample"
x:Class="AutocompleteSample.MainPage">
<StackLayout VerticalOptions="Start"
HorizontalOptions="Start"
Padding="30">
<autocomplete:SfAutoComplete
x:Name="autoComplete"
HeightRequest="40"
SelectedItem="Angola">
<autocomplete:SfAutoComplete.AutoCompleteSource>
<ListCollection:List x:TypeArguments="x:String">
<x:String>Antigua and Barbuda</x:String>
<x:String>American Samoa</x:String>
<x:String>Afghanistan</x:String>
<x:String>Antarctica</x:String>
<x:String>Argentina</x:String>
<x:String>Anguilla</x:String>
<x:String>Albania</x:String>
<x:String>Algeria</x:String>
<x:String>Andorra</x:String>
<x:String>Angola</x:String>
</ListCollection:List>
</autocomplete:SfAutoComplete.AutoCompleteSource>
</autocomplete:SfAutoComplete>
</StackLayout>
</ContentPage>
using Syncfusion.SfAutoComplete.XForms;
using System.Collections.Generic;
using Xamarin.Forms;
namespace AutocompleteSample
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
StackLayout stackLayout = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
Padding = 30
};
SfAutoComplete autoComplete = new SfAutoComplete()
{
HeightRequest = 40,
SelectedItem = "Angola",
MultiSelectMode = MultiSelectMode.None,
AutoCompleteSource = new List<string>()
{
"Antigua and Barbuda",
"American Samoa",
"Afghanistan",
"Antarctica",
"Argentina",
"Anguilla",
"Albania",
"Algeria",
"Andorra",
"Angola"
}
};
stackLayout.Children.Add(autoComplete);
this.Content = stackLayout;
}
}
}
Retrieving the selected item
When an item is selected from suggestion list, it can be retrieved using the SelectedItem
property.
The following code snippet demonstrates the way to retrieve SelectedItem
and display it in an alert.
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:autocomplete="clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms"
xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=netstandard"
xmlns:local="clr-namespace:AutocompleteSample"
x:Class="AutocompleteSample.MainPage">
<StackLayout VerticalOptions="Start"
HorizontalOptions="Start"
Padding="30">
<autocomplete:SfAutoComplete
x:Name="autoComplete"
HeightRequest="40"
MultiSelectMode="None"
SelectionChanged="autoComplete_SelectionChanged">
<autocomplete:SfAutoComplete.AutoCompleteSource>
<ListCollection:List x:TypeArguments="x:String">
<x:String>Antigua and Barbuda</x:String>
<x:String>American Samoa</x:String>
<x:String>Afghanistan</x:String>
<x:String>Antarctica</x:String>
<x:String>Argentina</x:String>
<x:String>Anguilla</x:String>
<x:String>Albania</x:String>
<x:String>Algeria</x:String>
<x:String>Andorra</x:String>
<x:String>Angola</x:String>
</ListCollection:List>
</autocomplete:SfAutoComplete.AutoCompleteSource>
</autocomplete:SfAutoComplete>
</StackLayout>
</ContentPage>
using Syncfusion.SfAutoComplete.XForms;
using System.Collections.Generic;
using Xamarin.Forms;
namespace AutocompleteSample
{
public partial class MainPage : ContentPage
{
SfAutoComplete autoComplete;
public MainPage()
{
InitializeComponent();
StackLayout stackLayout = new StackLayout()
{
VerticalOptions = LayoutOptions.Start,
HorizontalOptions = LayoutOptions.Start,
Padding = 30
};
autoComplete = new SfAutoComplete()
{
HeightRequest = 40,
MultiSelectMode = MultiSelectMode.None,
AutoCompleteSource = new List<string>()
{
"Antigua and Barbuda",
"American Samoa",
"Afghanistan",
"Antarctica",
"Argentina",
"Anguilla",
"Albania",
"Algeria",
"Andorra",
"Angola"
}
};
autoComplete.SelectionChanged += autoComplete_SelectionChanged;
stackLayout.Children.Add(autoComplete);
this.Content = stackLayout;
}
}
}
The following event will be triggered
private void autoComplete_SelectionChanged(object sender, Syncfusion.SfAutoComplete.XForms.SelectionChangedEventArgs e)
{
DisplayAlert("Selection Changed", "SelectedItem: " + autoComplete.SelectedItem, "OK");
}
NOTE
You can refer to our Xamarin AutoComplete feature tour page for its groundbreaking feature representations. You can also explore our Xamarin.Forms AutoComplete example to knows the functionalities of each feature.