如何在Xamarin中调用API在UI上显示数据

2024-01-11

我对 Xamarin 有点陌生,正在开发 iOS 应用程序,我需要调用 API 并绑定响应数据以查看已使用的MVVM图案。

这是我的ViewModel Code:

public class PersonalDetailModel : BaseViewModel
{
    private PersonalDetails personalDetails { get; set; }
    public Command LoadCommand;

    public PersonalDetailModel()
    {
        LoadCommand = new Command(async () => await GetPersonalDetais());

    }
    public String City
    {
        get
        {
            return personalDetails.city;
        }
        set
        {
            personalDetails.city = value;
        }
    }
    public string Phone
    {
        get { return personalDetails.phone; }
        set
        {
            personalDetails.phone = value;

        }
    }
    public string Email
    {
        get { return personalDetails.email; }
        set
        {
            personalDetails.email = value;

        }
    }

    public async Task<PersonalDetails> GetPersonalDetais()
    {
        var ApiRequest = RestService.For<IUserService>(Constants.BaseUrl);

        PersonalDetailsResponse ApiResponse = await ApiRequest.showProfile(Constants.token);

        PersonalDetailsResponse response = ApiResponse;

        this.personalDetails = response.result;
        personalDetails = new PersonalDetails
        {
            city = personalDetails.city,
            phone = personalDetails.phone,
            email = personalDetails.email
        };

        return this.personalDetails;
    }


}

In GetPersonalDetais()我在调试过程中从 API 获取值,但无法在 UI 中绑定该值。

XML代码:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="BarberCustomer.Views.PersonalDetails"
             >
    <ContentPage.Content>
        <StackLayout Orientation="Vertical" Padding="4,5" BackgroundColor="#efeff4" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
            <Frame HasShadow="True" Padding="8,5,8,12" CornerRadius="2"  Margin="1,1,0,0" HorizontalOptions="FillAndExpand" 
                   VerticalOptions="Start">
                <StackLayout Orientation="Vertical" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
                    <Label Text="Personal Details" HorizontalOptions="Start" VerticalOptions="FillAndExpand" LineBreakMode="WordWrap" FontSize="12" TextColor="#ad0e0e">
                        <Label.FontFamily>
                            <OnPlatform x:TypeArguments="x:String">
                                <OnPlatform.Android>SFProDisplay-Bold.ttf#SF-Pro-Display-Bold</OnPlatform.Android>
                                <OnPlatform.iOS>SFProDisplay-Bold</OnPlatform.iOS>
                            </OnPlatform>
                        </Label.FontFamily>
                    </Label>
                    <StackLayout Margin="0,1,0,1" HorizontalOptions="FillAndExpand" HeightRequest="1" BackgroundColor="#efeff4" VerticalOptions="EndAndExpand" Padding="0">
                    </StackLayout>
                    <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" VerticalOptions="Center">
                        <Image Source="location.png" WidthRequest="8" HeightRequest="11" VerticalOptions="Center" Aspect="AspectFit" ></Image>
                        <Label Text="{Binding City}" Margin="4,0,0,0"
                               HorizontalOptions="Start" VerticalOptions="FillAndExpand" LineBreakMode="WordWrap" FontSize="9" TextColor="#253045">
                            <Label.FontFamily>
                                <OnPlatform x:TypeArguments="x:String">
                                    <OnPlatform.Android>SFProDisplay-Medium.ttf#SFProDisplay-Medium</OnPlatform.Android>
                                    <OnPlatform.iOS>SFProDisplay-Medium</OnPlatform.iOS>
                                </OnPlatform>
                            </Label.FontFamily>
                        </Label>

                    </StackLayout>

                    <StackLayout HorizontalOptions="FillAndExpand" HeightRequest="1" BackgroundColor="#eeeeee" VerticalOptions="EndAndExpand" Padding="0" Margin="17,1,0,1">

                    </StackLayout>
                    <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" VerticalOptions="Center">
                        <Image Source="phone.png" WidthRequest="8" HeightRequest="11" VerticalOptions="Center" Aspect="AspectFit" ></Image>
                        <Label Text="{Binding Phone}" Margin="4,0,0,0"
                               HorizontalOptions="Start" VerticalOptions="FillAndExpand" LineBreakMode="WordWrap" FontSize="9" TextColor="#253045">
                            <Label.FontFamily>
                                <OnPlatform x:TypeArguments="x:String">
                                    <OnPlatform.Android>SFProDisplay-Medium.ttf#SFProDisplay-Medium</OnPlatform.Android>
                                    <OnPlatform.iOS>SFProDisplay-Medium</OnPlatform.iOS>
                                </OnPlatform>
                            </Label.FontFamily>
                        </Label>
                    </StackLayout>
                    <StackLayout HorizontalOptions="FillAndExpand" HeightRequest="1" BackgroundColor="#eeeeee" VerticalOptions="EndAndExpand" Padding="0" Margin="17,1,0,1">

                    </StackLayout>
                    <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand" VerticalOptions="Center">
                        <Image Source="mail.png" WidthRequest="11" HeightRequest="12" VerticalOptions="Center" Aspect="AspectFit" ></Image>
                        <Label Text="{Binding Email}" Margin="4,0,0,0"
                               HorizontalOptions="Start" VerticalOptions="FillAndExpand" LineBreakMode="WordWrap" FontSize="9" TextColor="#253045">
                            <Label.FontFamily>
                                <OnPlatform x:TypeArguments="x:String">
                                    <OnPlatform.Android>SFProDisplay-Medium.ttf#SFProDisplay-Medium</OnPlatform.Android>
                                    <OnPlatform.iOS>SFProDisplay-Medium</OnPlatform.iOS>
                                </OnPlatform>
                            </Label.FontFamily>
                        </Label>
                    </StackLayout>
                </StackLayout>
            </Frame>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

xml.cs:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class PersonalDetails : ContentPage
{
    PersonalDetailModel viewModel;

    public PersonalDetails()
    {
        InitializeComponent();

        viewModel = new PersonalDetailModel();

        BindingContext = viewModel;



    }

    protected async override void OnAppearing()
    {
        base.OnAppearing();
        viewModel.LoadCommand.Execute(null);

    }
}

每一个回应和建议都将受到赞赏!


你应该把BindingContext在 xaml.cs 或 xaml 中将 ViewModel 与 View 绑定。

有多种方法可以将数据绑定到视图。

ViewModel.cs

public class PettyCashListViewModel : BaseNavigationViewModel

页面.Xaml.cs

public partial class PettyCashListPage : ContentPage
{
    protected PettyCashListViewModel ViewModel => BindingContext as PettyCashListViewModel;

或在页面构造函数内

this.BindingContext = ViewModel;

或在您的 page.xaml 内

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:viewModels="clr-namespace:XamarinPOC.ViewModel; assembly=XamarinPOC.ViewModel"
         x:Class="XamarinPOC.Summary"
         Title="Summary List">
     <ContentPage.BindingContext>
        <viewModels:SummaryViewModel/>
     </ContentPage.BindingContext>
     <StackLayout>
        <Label Text="{Binding test}"/>
     </StackLayout>
   </ContentPage>

参考:在 Xamarin.Forms 上的 XAML 中将 BindingContext 设置为 ViewModel https://stackoverflow.com/questions/38552035/set-bindingcontext-to-viewmodel-in-xaml-on-xamarin-forms

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Xamarin中调用API在UI上显示数据 的相关文章

随机推荐

  • 禁止 NSTextField 的文本完成下拉列表

    我正在尝试创建 NSComboBox 的效果completes 是的 没有按钮 并且numberOfVisibleItems 0 例如 尝试在 iTunes 的 获取信息 窗口中填写专辑或艺术家 为了实现这一点 我使用了 NSTextFie
  • 如何告诉 qemu 将 ram 复制到文件中

    我正在制作一个操作系统 并使用 Qemu 对其进行调试 我想要一种方法来读取一些指令末尾的内存的一些大块 怎么做 可以对 Qemu 说将 ram 复制到文件中吗 如果不是我能做什么 qmp 或 hmp 命令dump guest memory
  • IDEA - “从外部模型导入”与“从现有源创建”?

    在IDEA 11中 从外部模型导入项目 和 从现有源创建项目 有什么区别 我已经在现有代码上测试了这两个功能 计算创建的文件数量和大小增加 似乎这两个功能都做同样的事情 那么何时使用第一个功能和何时使用第二个功能的黄金法则是什么 通过 从外
  • 网站不会向下滚动

    我的网站可以在 15 英寸笔记本电脑上运行 但每当我调整浏览器大小时 我网站上的一些信息就会 消失 因为我无法滚动 滚动条不会出现 我的两个网站 它们是学校项目的一部分 遇到了这个问题 在第一个网站上 当在较小的浏览器窗口中查看网站时 粘性
  • 在 d3 sunburst v4 中旋转标签

    我尝试使用 d3 v4 sunburst 来可视化 json 中的一些数据 我可以用我想要的标签显示旭日图 但左侧的标签是颠倒的 我尝试了各种方法 我在其他来源找到了这些方法 但对我来说没有任何作用 这是我的编码
  • 华为应用画廊。我的应用如何在中国大陆市场发布?

    我的应用程序已经在Appgallery上获得批准 但可能华为在中国大陆市场的批准非常严格 他们给我发了一封拒绝在中国发表的邮件 我修改了应用程序和应用程序版权信息 但在中国境外发布时未获得批准 华为给我发了邮件 但是很复杂 我不知道如何提供
  • OneDrive for Business:“invalid_request”,“error_description”:“AADSTS90014:请求正文必须包含以下参数:'grant_type

    我正在尝试将 OneDrive for Business 集成到 Web 表单应用程序 为此 我使用给出的文档this url https dev onedrive com auth aad oauth htm在网络表单应用程序中 我有两个
  • 如何导出 Vagrant 虚拟机以进行传输

    我有一个 vagrant box 已启动并正在运行 配置有 LAMP 堆栈 我需要将其转移到另一台电脑上 我怎样才能导出它 我想我可以获得一个可以复制到另一台电脑的文件 这样我就可以运行一些命令来导入流浪盒 你有两种方法可以做到这一点 我称
  • NodeJS - 如何删除文本文件的第一行而不读取所有行?

    我的 S3 存储桶中有以下文件 field1 field2 field3 VAL11 VAL12 VAL13 VAL21 VAL22 VAL23 VAL31 VAL32 VAL33 最终目标是仅删除文件的第一行field1 field2 f
  • nhibernate 3.3 一对多映射代码更新子项而不是插入

    我与 旧 nhibernate 或 flutter 建立了无数次的一对多关联 但我无法让它与代码映射一起工作 这些是课程 public class Parent public virtual IList
  • MySQL中如何计算NULL值?

    我想知道如何找到 MySQL 数据库中所有 NULL 值 例如我试图显示所有还没有平均值的用户 这是 MySQL 代码 SELECT COUNT average as num FROM users WHERE user id user id
  • 过滤 mysql 复制(ignore-db)

    mysqlignore db 根据服务器 my cnf 工作 AFAIK i e binlog ignore db mysql replicate ignore db mysql 我不确定 如果这也适用于客户端 任何人都可以解释该机制 我如
  • 如何告诉 Ninject 绑定到它没有引用的实现

    我在用着NinjectMVC3 http nuget org List Packages Ninject MVC3在我的 ASP NET MVC3 项目中 我有3层 Foo Web Foo 服务 Foo Data Foo Web 引用 Fo
  • 如何在 PHP 页面中包含 JSP

    我希望在 PHP 模板中包含包含 Java 代码的 JSP 文件 有问题的两个包含文件是头文件和页脚文件 有人有这样做的经验吗 我们正在考虑仅执行 HTTP 请求来独立地从 JSP 文件中获取生成的 HTML 但不确定这样做是否会出现轻微的
  • APNS 不适用于 Adhoc 构建

    我正在使用具有临时配置文件和证书的应用程序 该申请尚未发布 但 APNS 给出了错误8 无效令牌 以下事项已被检查 应用程序具有授权密钥
  • NDK Android - 无法同时构建 ARMv5 和 V7

    我面临一个奇怪的问题 我正在为我的 Android 应用程序构建一个共享库 我无法同时构建armv5和armv7 如果这样做 我会在第二次运行时 当 ndk 构建 armV7 库时 在源文件中出现很多错误 例如 FinderPatternI
  • 更改 DOJO 小部件的默认样式

    我希望能够更改一些默认的 CSS 样式 例如 dijit TitlePane 而无需破解 工厂安装的 CSS 主题 我想做的是删除Title and 内容外层TitlePane 的边框 在声明小部件时设置一个类 在本例中为 无边框 不起作用
  • Ajax 在单击按钮上重新加载 div 内容

    我的想法是 我有一个主 DIV 其中包含汽车信息的内容迷你 div 每行分为两个 这是我通过数据库查询得到的 我希望在按下该按钮时使用来自DB 这可能吗 请指教 代码如下所示 div class SearchBlocks div class
  • 无法从 c# 中保存 Gnuplot png

    我试图从 c 中打开 gnuplot 并让它保存图表的 png 我有两个问题 1 gnuplot 的黑色命令行框和实际绘图都会出现 我希望这两个都不要出现 2 将终端设置为 png 并绘制 sin x 后 它实际上并没有保存文件 不过 这些
  • 如何在Xamarin中调用API在UI上显示数据

    我对 Xamarin 有点陌生 正在开发 iOS 应用程序 我需要调用 API 并绑定响应数据以查看已使用的MVVM图案 这是我的ViewModel Code public class PersonalDetailModel BaseVie