【发布时间】:2021-08-13 01:36:30
【问题描述】:
我有一个显示产品列表的 xamarin 页面和一个代表产品类型的选择器。 我的问题是,当我启动应用程序并第一次尝试访问页面时,
在调试模式下,我可以看到我作为 ItemsSource 使用的列表具有价值,
但是当页面加载时,选择器是灰色的并且没有任何数据。
当我离开带有选择器的页面并第二次打开它时,选择器已加载数据!
这是我的代码!
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Converters="clr-namespace:eProdaja.Mobile.Converters"
mc:Ignorable="d"
x:Class="Restoran.Mobile.Views.ProizvodiPage">
<ContentPage.Resources>
<ResourceDictionary>
<Converters:ImageConverter x:Key="imgConv"></Converters:ImageConverter>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<StackLayout>
<Picker ItemsSource="{Binding TipProizvodaList}" ItemDisplayBinding="{Binding Naziv}" SelectedItem="{Binding SelectedTipProizvoda}"></Picker>
<ListView ItemsSource="{Binding ProizvodiList}" ItemSelected="ListView_ItemSelected" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Padding="10" Margin="5" HorizontalOptions="CenterAndExpand" >
<Image Source="{Binding Slika, Converter={StaticResource imgConv}}" ></Image>
<Label Text="{Binding Naziv}"
d:Text="{Binding .}"
LineBreakMode="NoWrap"
Style="{DynamicResource ListItemTextStyle}"
FontSize="16" HorizontalTextAlignment="Center" HorizontalOptions="CenterAndExpand" />
<Button HorizontalOptions="Center" BorderColor="Transparent" BackgroundColor="Transparent" TextColor="OrangeRed" Text="Dodaj u košaricu"></Button>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>
xaml.cs 内的代码
private ProizvodiViewModel model = null;
public ProizvodiPage()
{
InitializeComponent();
BindingContext = model = new ProizvodiViewModel();
}
protected async override void OnAppearing()
{
base.OnAppearing();
await model.Init();
}
viewModel 内的代码
public ObservableCollection<TipProizvoda> TipProizvodaList { get; set; } = new ObservableCollection<TipProizvoda>();
public async Task Init()
{
if (TipProizvodaList.Count == 0)
{
var TPList = await _tipProizvoda.Get<List<TipProizvoda>>(null);
TipProizvodaList.Clear();
TipProizvoda empty = new TipProizvoda { TipProizvodaID = 0, Naziv = "" };
TipProizvodaList.Add(empty);
foreach (var tipProizvoda in TPList)
{
TipProizvodaList.Add(tipProizvoda);
}
}
}
【问题讨论】:
-
首先,如果问题出在您的 Picker 上,您为什么不发布该代码?其次,您在 XAML 中定义 BindingContext 和背后的代码。选择一个或另一个,而不是两个
-
正如@Jason 所说,您已将页面 BindingContext 设置了两次。而且您还没有使用选择器发布 xaml 代码。我们不能使用上面的代码来制作一个 repro 示例。
-
@Jason 嗨!感谢您的帮助,我添加了完整的 xaml 页面代码并删除了 XAML 中绑定上下文的定义
-
@NicoZhu-MSFT 你好!感谢您的帮助,我添加了完整的 xaml 页面代码并删除了 XAML 中绑定上下文的定义
-
您是否在向其添加数据时重新初始化
TipProizvodaList,还是一直使用Add()方法?
标签: c# xamarin xamarin.forms uwp-xaml