Xamarin选取器-Selecteditem无法在pageload上工作

Xamarin选取器-Selecteditem无法在pageload上工作,xamarin,Xamarin,我被我的选择器卡住了,它被pageload上的类别填充。但是,我希望选择正确的产品类别作为selectitem,但不起作用 谢谢你的帮助 我的XAML: <Picker x:Name="Picker_Cats" Title="-- Select Category --" ItemsSource="{Binding AllCats}" ItemDisplayBinding="{Binding CategoryName}&

我被我的选择器卡住了,它被pageload上的类别填充。但是,我希望选择正确的产品类别作为selectitem,但不起作用

谢谢你的帮助

我的XAML:

<Picker x:Name="Picker_Cats" Title="-- Select Category --"  ItemsSource="{Binding AllCats}" ItemDisplayBinding="{Binding CategoryName}" SelectedItem="{Binding SelectedCat,Mode=TwoWay}" Grid.Row="3" Grid.Column="1" TextColor="DarkGray" SelectedIndexChanged="Picker_Cats_SelectedIndexChanged"/>

我的虚拟机:

private ObservableCollection<Category> _AllCats;
public ObservableCollection<Category> AllCats
        {
            set
            {
                this._AllCats = value;
                OnPropertyChanged();
            }
            get
            {
                return this._AllCats;
            }
        }


        private Category _SelectedCat;
        public Category SelectedCat
        {           
           set
            {
                this._SelectedCat = value;
                OnPropertyChanged();
            }
            get
            {
                return this._SelectedCat;
            }
        }





        public ProdsMngtDetailViewModel(Product product , Category selectedcat)
        {
            GetCatsAsync();
            SelectedCat = selectedcat;
            SelectedProduct = product;
            CategoriesService cs = new CategoriesService();
            AllCats = cs.GetAllCats();
        }
private observedcollection\u allcat;
公众可观察收集所有猫
{
设置
{
这个。_AllCats=值;
OnPropertyChanged();
}
得到
{
把这个还给所有的猫;
}
}
私人类别_选择的猫;
公共类别选择CAT
{           
设置
{
这是。\ u SelectedCat=value;
OnPropertyChanged();
}
得到
{
返回此项。\ u选择Cat;
}
}
公共产品NGTDetailViewModel(产品产品,类别选择CAT)
{
GetCatsAsync();
SelectedCat=SelectedCat;
SelectedProduct=产品;
CategoriesService cs=新的CategoriesService();
AllCats=cs.GetAllCats();
}

我调试了我的应用程序,SelectedCat获得了我想要的类别值,但问题是picker没有选择它。

我们无法直接设置SelectedItem的值。像

SelectedCat = selectedcat;
它需要包含在选择器的项目资源中

在您的情况下,您可以像下面这样修改它

public ProdsMngtDetailViewModel(Product product , Category selectedcat)
{
  GetCatsAsync();
  SelectedProduct = product;
  CategoriesService cs = new CategoriesService();
  AllCats = cs.GetAllCats();

  // set SelectedCat after init the AllCats 

  foreach (var model in AllCats)
  {
      if(model.CategoryName==selectedcat.CategoryName)
      {
          SelectedCat = model;
      }
  }

}

我们无法直接设置SelectedItem的值。像

SelectedCat = selectedcat;
它需要包含在选择器的项目资源中

在您的情况下,您可以像下面这样修改它

public ProdsMngtDetailViewModel(Product product , Category selectedcat)
{
  GetCatsAsync();
  SelectedProduct = product;
  CategoriesService cs = new CategoriesService();
  AllCats = cs.GetAllCats();

  // set SelectedCat after init the AllCats 

  foreach (var model in AllCats)
  {
      if(model.CategoryName==selectedcat.CategoryName)
      {
          SelectedCat = model;
      }
  }

}

谢谢Lucas,明白了你们的观点并测试了它,但应用程序现在进入中断模式并收到以下错误。。请进一步协助。System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。参数名称:index‘您这边的索引是什么?您可以共享您的示例,这样我就可以在我这边对其进行测试。已调试错误,上面的错误是由于索引交换引起的。再次尝试后,选择器仍不显示任何selecteditem,但显示正确类别的selectedcat已拾取。。有什么想法吗?不要使用
SelectedIndexChanged=“Picker\u Cats\u SelectedIndexChanged”
,因为您已经使用了MVVM。您可以使用
SelectedCat
的set方法处理逻辑。感谢Lucas,他理解了您的观点并对其进行了测试,但应用程序现在进入中断模式并收到以下错误。。请进一步协助。System.ArgumentOutOfRangeException:'索引超出范围。必须为非负数且小于集合的大小。参数名称:index‘您这边的索引是什么?您可以共享您的示例,这样我就可以在我这边对其进行测试。已调试错误,上面的错误是由于索引交换引起的。再次尝试后,选择器仍不显示任何selecteditem,但显示正确类别的selectedcat已拾取。。有什么想法吗?不要使用
SelectedIndexChanged=“Picker\u Cats\u SelectedIndexChanged”
,因为您已经使用了MVVM。您可以使用
SelectedCat
的set方法处理逻辑。