【问题标题】:Is there a better way to bind to JObject with XAML on Xamarin Forms?有没有更好的方法在 Xamarin Forms 上使用 XAML 绑定到 JObject?
【发布时间】:2019-10-05 00:34:37
【问题描述】:

我正在从 Node API 中提取 JSON。我希望能够只使用 JObject 而不是预定义类型来解析响应。这将使我对自己想做的事情有更大的灵活性。

以下是数据的示例。

{
  section: {
    title: "Login",
    body: "This is your body!"
  }
}

这是我尝试过的 XAML 示例。这没有显示任何东西。绑定的标签为空白,但不会引发错误。 示例 1:

<Label HorizontalTextAlignment="Center"
       Text="{Binding Path=[section][body]}"
       x:Name="Body">
</Label>

这是一个使用相同数据的有效绑定。虽然这在技术上是可行的,但我预计物体的深度会超过几个层次。我可能只是为父控件设置 BindingContext,但这似乎会变得混乱。 示例 2:

<Label HorizontalTextAlignment="Center"
       BindingContext="{Binding Path=[section]}"
       Text="{Binding Path=[body]}"
       x:Name="Body">
</Label>

【问题讨论】:

  • 如果你有一个复杂的json字符串,你最好定义一个模型类来显示。这种通用的绑定对话适用于简单的结构。
  • 在这个项目中,我们正在尝试创建一个动态屏幕。我希望将 XAML 传递给应用程序并将其呈现在屏幕上,而无需通过应用商店推送更新。我唯一没有弄清楚的部分是如何绑定到 JObject。该应用程序将具有某些类似于基本 CMS 的屏幕。管理员将能够更改这些特定屏幕上的内容。
  • 嗨,它对你有用吗?

标签: xaml xamarin mvvm xamarin.forms


【解决方案1】:

最后,我发现我们必须在每个属性之间添加一个简单的点才能使其工作。

即字符串是:

string jsonStr = @"{
                        section: 
                        { 
                        title: 
                        {
                            subtitle: ""subtitle""
                        },
                        body: ""This is your body!""
                        },

                    }";
var jsonObject = JsonConvert.DeserializeObject(jsonStr);
BindingContext = jsonObject;

而xaml绑定代码是:

<Label HorizontalTextAlignment="Center" Text="{Binding Path=[section].[title].[subtitle]}" />

标签显示正确的字符串“subtitle”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    相关资源
    最近更新 更多