我强烈建议您一次检索所有数据,而不是每次都选择 Picker1,再次查询数据库,然后再次填充 Picker2。
这将在很大程度上取决于网络并影响交互性。
所以,我们可以根据我们的数据结构一次得到所需的数据。
我创建了一个简单的demo来模拟这个功能,主要代码是:
类ValueModel
public class ValueModel
{
public string ValueName { get; set; }
}
班级CategoryModel
public class CategoryModel
{
public string CategoryName { get; set; }
public ObservableCollection<ValueModel> values { get; set; }
public CategoryModel()
{
values = new ObservableCollection<ValueModel>();
}
}
班级CategoryViewModel
public class CategoryViewModel
{
public ObservableCollection<CategoryModel> Categories { get; set; }
public CategoryViewModel()
{
Categories = new ObservableCollection<CategoryModel>();
}
}
MainPage.xaml
<StackLayout>
<Picker Title="select category" x:Name="CategoryPicker" ItemsSource="{Binding Categories}" ItemDisplayBinding="{Binding CategoryName}" SelectedIndexChanged="DiameterPicker_SelectedIndexChanged"></Picker>
<Picker Title="select value" x:Name="ValuePicker" ItemDisplayBinding="{Binding ValueName}"></Picker>
</StackLayout>
MainPage.xaml.cs
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var categories = new ObservableCollection<CategoryModel>() {
new CategoryModel{CategoryName="A",values= {new ValueModel{ ValueName="1" }, new ValueModel { ValueName = "2" }, new ValueModel { ValueName = "3" } ,new ValueModel{ ValueName="4"}} },
new CategoryModel{CategoryName="B",values= {new ValueModel{ ValueName="5" }, new ValueModel { ValueName = "6" }, new ValueModel { ValueName = "7" } } }
};
CategoryViewModel categoryViewModel = new CategoryViewModel();
categoryViewModel.Categories = categories;
BindingContext = categoryViewModel;
}
private void DiameterPicker_SelectedIndexChanged(object sender, EventArgs e)
{
CategoryViewModel viewModel = BindingContext as CategoryViewModel;
ValuePicker.ItemsSource = viewModel.Categories[((Picker)sender).SelectedIndex].values;
}
}
结果是: