【问题标题】:Carousel View in Xamarin.Forms iOSXamarin.Forms iOS 中的轮播视图
【发布时间】:2017-09-17 04:58:41
【问题描述】:

我有一个网络服务,我正在从 json 字符串中获取 imageurl。但我猜错误的绑定部分。没有显示任何图像。这是我的代码。

Xaml:

<cv:CarouselView ItemsSource="{Binding Path=BindingContext.Hotel.HotelImages, Source={x:Reference HotelDetailPage}}" HeightRequest="200">
        <cv:CarouselView.ItemTemplate>
          <DataTemplate>
            <StackLayout HeightRequest="200">
              <Grid HeightRequest="200">
                <Image Aspect="AspectFill" Source="{Binding FullPath}"/>
              </Grid>
            </StackLayout>
          </DataTemplate>
        </cv:CarouselView.ItemTemplate>
      </cv:CarouselView>

这是我的get json服务代码;

for (int j = 0; j < imageCount; j++)
{
        HotelImageModel hotelImage = new HotelImageModel();    
        hotelImage.FullPath = json["data"][i]["HotelImages"][j]["FullPath"].Value;    
        hotel.HotelImages.Add(hotelImage);
}

注意:我在这个例子中得到了帮助:https://blog.xamarin.com/flip-through-items-with-xamarin-forms-carouselview

【问题讨论】:

  • 您的图片是否来自 HTTPS 来源?检查你的输出窗口。 iOS 对仅使用安全连接越来越严格。
  • 图像来自 json 服务所以 json 字符串我转换反序列化。
  • 如何将 JSON 字符串转换为图像?是图片网址吗?您可以发布示例 JSON 吗?获取 json 服务代码中的 ijson 是什么?
  • 我没有转换我正在使用 imageUrl 的图像。我只将 json 转换为字符串。 i 是酒店的索引号,json 使用转换为字符串。

标签: c# ios json xamarin.ios xamarin.forms


【解决方案1】:

您能否验证您正在转换的 URL 指的是可访问的链接? (我假设一个网址?) 你能给我们完整的代码吗?

只是一个建议,但我注意到您的 var 酒店在代码隐藏文件中写为“酒店”,在您的 XAML 文件中写为“酒店”...

我写了一些关于 CarouselView 的 SO 文档,但材料现在在下面。在本文档中,您将找到一个非常简单的示例。也许一个想法来测试你的问题和一些虚拟数据?


CarouselView — 预发布版

导入轮播视图

导入 CarouselView 最简单的方法是使用 Xamarin / Visual Studio 中的 NuGet-Packages Manager:

要使用预发布包,请确保启用左角的“显示预发布包”复选框。

每个子项目(.iOS/.droid./.WinPhone)都必须导入这个包。

将 CarouselView 导入 XAML 页面

基础知识

在 ContentPage 的标题中,插入以下行:

xmlns:cv="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView"

标签之间放置 CarouselView:

<cv:CarouselView x:Name="DemoCarouselView">
</cv:CarouselView>

x:Name 会给你的 CarouselView 一个名字,可以在 C# 代码隐藏文件中使用。 这是将 CarouselView 集成到视图中所需的基础知识。 由于 CarouselView 是空的,因此给定的示例不会显示任何内容。

创建可绑定源

作为 ItemSource 的示例,我将使用字符串的 ObservableCollection。

public ObservableCollection<TechGiant> TechGiants { get; set; }

TechGiant 是一个包含科技巨头名称的类

public class TechGiant
{
    public string Name { get; set; }

    public TechGiant(string Name)
    {
        this.Name = Name;
    }
}

在页面的 InitializeComponent 之后,创建并填充 ObservableCollection

TechGiants = new ObservableCollection<TechGiant>();
TechGiants.Add(new TechGiant("Xamarin"));
TechGiants.Add(new TechGiant("Microsoft"));
TechGiants.Add(new TechGiant("Apple"));
TechGiants.Add(new TechGiant("Google"));

最后将TechGiants设置为DemoCarouselView的ItemSource

DemoCarouselView.ItemsSource = TechGiants;

数据模板

在 XAML - 文件中,给 CarouselView 一个 DataTemplate:

<cv:CarouselView.ItemTemplate>
</cv:CarouselView.ItemTemplate>

定义一个数据模板。在这种情况下,这将是一个带有文本绑定到 itemsource 和绿色背景的标签:

<DataTemplate>
    <Label Text="{Binding Name}" BackgroundColor="Green"/>
</DataTemplate>

就是这样!运行程序,看看结果!

【讨论】:

  • 感谢您的回答,我已经解决了问题。它是由 Xamarin.Forms 版本引起的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多