代码之家  ›  专栏  ›  技术社区  ›  Prashant Pimpale Dila Gurung

无法为Xamarin表单中的选取器设置默认值

  •  0
  • Prashant Pimpale Dila Gurung  · 技术社区  · 6 年前

    我习惯于在我的项目中挑选。我能够成功地显示选取器中的所有项目,但对于更新功能,我无法显示选取器的默认项目,

    SelectedItem SelectedIndex

    有人能解释一下吗 选择编辑项 作品,

    我的代码:

    <Picker Title="Select Gender" Margin="0,0,0,-5" ItemsSource="{Binding GenderList}"  x:Name="pkrGender" ItemDisplayBinding="{Binding Name}" >
    

    public class MainViewModel : BaseViewModel 
    {
     // Which is bind to ItemSource of the picker
     public ObservableCollection<Gender> GenderList { get; set; }    
    
     public class Gender: BaseViewModel {
      private Genders _gender {
       get;
       set;
      }
    
      public Gender(Genders gender) {
       this._gender = gender;
      }
    
    
      public string Name {
       get {
        return _gender.name;
       }
    
       set {
        _gender.name = value;
        OnPropertyChanged("Name");
       }
      }
    
     }
     public void APICALL()
     { 
       // Getting values from API
     }
    
    }   
    

    public class Genders
    {
       public string Name {get;set;}
       public string Code {get;set;}
    }
    

    我在ViewModel中添加如下值:

    // From API Response Getting the list of Genders
    var genderList = APICALL();
    foreach (Genders gender in genderList)
    {
        GendersList.Add(new Genders(gender));
    }
    

    但无法绑定默认值在我的情况下,他选择男性注册时,所以男性应该是默认值的选取器。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Tom    6 年前

    基本上,我认为你错过了 OnPropertyChanged 中的方法 GenderList 财产。因此,你的 Picker

    我发现以下方法对我有效:

    private List<Genders> listOfGenders = new List<Genders>();
    
    public List<Genders> GenderList
    {
        get => listOfGenders;
        set 
        {
            listOfGenders = value;
            OnPropertyChanged(nameof(GenderList));
        }
    }
    
    private void AddToGenderList(params Gender[] genders)
    {
        if (listOfGenders == null)
        {
            listOfGenders = new List<Genders>();
        }
    
        foreach(Gender gender in genders)
        {
            listOfGenders.Add(gender);
        }
    
        GendersList = listOfGenders;
    }
    

    SelectedItem SelectedIndex

    选择编辑项 对象 选取器 . 在您的情况下,它将返回 Gender 选择的对象。

    选定索引 返回您在列表中选择的项的索引。

    指定默认值

    要指定默认值,首先确保列表不是空的。例如,下面的代码(从上面的代码展开)应该可以工作:

    private int currentSelectedIndex = 0;
    
    public int CurrentSelectedIndex
    {
        get => currentSelectedIndex;
        set
        {
            currentSelectedIndex = value;
            OnPropertyChanged(nameof(CurrentSelectedIndex));
        }
    }
    
    public MainViewModel()
    {
        AddToGenderList(new Gender[] 
        {
            new Gender
            {
                Name = "Male",
                Code = "M"
            },
            new Gender
            {
                Name = "Female",
                Code = "F"
            },
            new Gender
            {
                Name = "Other",
                Code = "O"
            }
            // Add more if necessary
        });
    
        // Set the default to "Male"
        CurrentSelectedIndex = 0;
    }
    

    <Picker 
        Title="Select Gender" 
        Margin="0,0,0,-5" 
        ItemsSource="{Binding GenderList}"  
        SelectedIndex="{Binding CurrentSelectedIndex}"
        x:Name="pkrGender" 
        ItemDisplayBinding="{Binding Name}" />