Xamarin Forms Picker级联

3
我参与了一个项目,目前卡在以下情况中: 我有一个选择器(下拉菜单),需要根据从第一个选择器中选择的第一项显示第二个选择器(级联)。 值是动态的(来自Sqlite表)。 以下是我的代码:
XAML
 Picker 1
    <Picker x:Name="picker" Title="Select Country" SelectedIndexChanged="OnModeChosen">
    Picker 2
    <Picker x:Name="picker2" Title="Select Regions" IsEnabled="False">

模型

public class Country
        {
          [PrimaryKey]
          Public int CountryId {get;set;}
          public string CountryName {get;set;}

          public Country(){}
        }

        public class Regions
        {
          [PrimaryKey]
          public int RegionsId {get; set;}
          public string RegionsName {get;set;}
          [ForeignKey(typeof(Country))]
          public int CountryId {get;set;}

          public Regions(){}
        }

// 代码后台
private void OnModeChosen(object sender, EventArgs e)
    {
    Picker modePicker = (Picker)sender;
    var mode = picker.SelectedIndex;
    picker2.Items.Clear();

         switch(mode)
         {
           //This is the part I would like dynamic
         }
     }

我希望处理程序"OnModeChosen"能够动态地工作(来自选取器1的任何选择值都将显示选取器2的相应值)。 顺便说一下,如果有其他方法,我会很感激,因为我对获得预期结果感兴趣。 谢谢你们的支持。 我已经在这上面工作了几个小时,在互联网上找不到什么值得的东西。

我解决了类似的问题,我的问题涉及首先选择一个房屋,然后它会填充其他选取器中的公寓,这是你想要的吗? - Jordy Dieltjens
1个回答

1
这是我在我的项目中解决它的方法:
  private void OnModeChosen(object sender, EventArgs e)
    {
         Country country = ((Country)(picker.SelectedItem)) // get the country object from  the picker
          picker2.ItemsSource =  GetRegions(country.CountryId ) // call the function to get the regions for that country
          picker2.ItemDisplayBinding = New Binding("RegionsName")
          picker2.SelectedIndex = 0 // not sure why I did this, I think to make sure an item was selected
        stackpicker2.IsVisible = true // make the stack layout visible with the 2nd picker
        picker2.IsEnabled = true;
    }

希望这有所帮助。

嗨Jordy,我无法实现你的答案,这是OnModeChosen的全部代码吗?我还是卡住了。 - Santos
在第2行,我调用了一个名为GetRegions的函数,这个函数需要你自己编写。在这里,你需要传递国家的idd,并使用该idd从你的sqllite数据库中获取区域信息。如果这不是问题所在,那么你卡住的地方是什么? - Jordy Dieltjens
例如,您可以使用以下语句从 Picker 1 中获取对象:Country country = ((Country)(e.item)),但 e.item 不起作用。 - Santos
很奇怪,你能展示一下填充picker1的代码吗? - Jordy Dieltjens
1
@JordyDieltjens 我的意思是不需要在SelectedIndexChanged事件中手动设置东西。即使用Xaml中的绑定。在代码后台动态添加绑定似乎对于简单的级联选择器解决方案来说是一个棘手的问题。顺便说一句:我确实想出了如何做到这一点。同时,通过visibilityConverter绑定绑定Secondary/Cascaded选择器的可见性。 - maplemale
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接