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