Чтобы объяснить это, я сгенерировал некоторые проверенные данные, чтобы показать, как реализовать это, код Xaml следующим образом:
<?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:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="FormsPickerSample.MainPage">
<StackLayout HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
Spacing="10"
Margin="20">
<Picker HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
BackgroundColor="LawnGreen"
ItemDisplayBinding="{Binding Name}"
SelectedIndexChanged="dropdown_SelectedIndexChanged"
x:Name="dropdown" />
<Picker HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
BackgroundColor="MediumSlateBlue"
SelectedIndexChanged="dropdown1_SelectedIndexChanged"
ItemDisplayBinding="{Binding Name}"
x:Name="dropdown1" />
<Picker HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
BackgroundColor="MediumOrchid"
ItemDisplayBinding="{Binding CityName}"
SelectedIndexChanged="dropdown2_SelectedIndexChanged"
x:Name="dropdown2" />
<StackLayout HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
Padding="10"
BackgroundColor="LightGreen">
<Label HorizontalOptions="Center"
VerticalOptions="Center"
Text="show result"
x:Name="label" />
</StackLayout>
</StackLayout>
</ContentPage>
Затем в ContentPage :
public partial class MainPage : ContentPage
{
List<CountryClass> countryList = new List<CountryClass>();
List<StateClass> stateList = new List<StateClass>();
List<CityClass> cityList = new List<CityClass>();
public MainPage()
{
InitializeComponent();
List<CityClass> cityList1 = new List<CityClass>();
cityList1.Add(new CityClass { CityName = "ACountry-State-A-City A" });
cityList1.Add(new CityClass { CityName = "ACountry-State-A-City B" });
cityList1.Add(new CityClass { CityName = "ACountry-State-A-City C" });
cityList1.Add(new CityClass { CityName = "ACountry-State-A-City D" });
List<CityClass> cityList2 = new List<CityClass>();
cityList2.Add(new CityClass { CityName = "ACountry-State-B-City A" });
cityList2.Add(new CityClass { CityName = "ACountry-State-B-City B" });
cityList2.Add(new CityClass { CityName = "ACountry-State-B-City C" });
cityList2.Add(new CityClass { CityName = "ACountry-State-B-City D" });
List<CityClass> cityList3 = new List<CityClass>();
cityList3.Add(new CityClass { CityName = "BCountry-State-A-City A" });
cityList3.Add(new CityClass { CityName = "BCountry-State-A-City B" });
cityList3.Add(new CityClass { CityName = "BCountry-State-A-City C" });
cityList3.Add(new CityClass { CityName = "BCountry-State-A-City D" });
List<CityClass> cityList4 = new List<CityClass>();
cityList4.Add(new CityClass { CityName = "BCountry-State-B-City A" });
cityList4.Add(new CityClass { CityName = "BCountry-State-B-City B" });
cityList4.Add(new CityClass { CityName = "BCountry-State-B-City C" });
cityList4.Add(new CityClass { CityName = "BCountry-State-B-City D" });
List<StateClass> stateList1 = new List<StateClass>();
stateList1.Add(new StateClass {Name = "ACountry-State-A" ,City = cityList1 });
stateList1.Add(new StateClass {Name = "ACountry-State-B", City = cityList2 });
List<StateClass> stateList2 = new List<StateClass>();
stateList2.Add(new StateClass { Name = "BCountry-State-A", City = cityList3 });
stateList2.Add(new StateClass { Name = "BCountry-State-B", City = cityList4 });
countryList.Add(new CountryClass {Name = "CountryA",State = stateList1 });;
countryList.Add(new CountryClass {Name = "CountryB",State = stateList2 });
dropdown.ItemsSource = countryList;
dropdown.SelectedItem = countryList[0];
}
private void dropdown_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
stateList = countryList[selectedIndex].State;
dropdown1.ItemsSource = stateList;
dropdown1.SelectedItem = stateList[0];
}
}
private void dropdown1_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
cityList = stateList[selectedIndex].City;
dropdown2.ItemsSource = cityList;
dropdown2.SelectedItem = cityList[0];
}
}
private void dropdown2_SelectedIndexChanged(object sender, EventArgs e)
{
var picker = (Picker)sender;
int selectedIndex = picker.SelectedIndex;
if (selectedIndex != -1)
{
label.Text = cityList[selectedIndex].CityName;
}
}
}
Класс Модель выглядит следующим образом:
CountryClass :
public class CountryClass
{
public string Name { get; set; }
public string Details { get; set; }
public string ImageUrl { get; set; }
public List<StateClass> State { get; set; }
}
StateClass :
public class StateClass
{
public string Name { get; set; }
public string Details { get; set; }
public string ImageUrl { get; set; }
public List<CityClass> City { get; set; }
}
CityClass :
public class CityClass
{
public string CityName { get; set; }
}
Эффект следующим образом:
Примечание:
Если можно получать данные из веб-API или локальной базы данных, то создавать проверенные данные не нужно.