xamarin - 来自嵌套类的 Xamarin Picker 绑定
问题描述
我正在调用一个返回嵌套类的 API(下面的示例),并且我正在努力将它们绑定到 Picker。
是否可以将它们的嵌套类按原样绑定到选择器?还是我需要以某种方式将它们添加到 IList?
<Picker Title="Select a Currency" ItemsSource="{Binding CurrencyClass}" ItemDisplayBinding="{Binding currencyName}"/>
class MainPageViewModel : INotifyPropertyChanged
{
private Currencies _CurrencyClass;
public Currencies CurrencyClass
{
get { return _CurrencyClass; }
set
{
_CurrencyClass = value;
OnPropertyChanged();
}
}
}
这是他们也被消毒的课程的一部分
public class Currencies
{
public class Rootobject
{
public Results results { get; set; }
}
public class Results
{
public XCD XCD { get; set; }
public EUR EUR { get; set; }
}
public class XCD
{
public string currencyName { get; set; }
public string currencySymbol { get; set; }
public string id { get; set; }
}
public class EUR
{
public string currencyName { get; set; }
public string currencySymbol { get; set; }
public string id { get; set; }
}
}
这是我收到的 json 的一部分。
{
"results": {
"XCD": {
"currencyName": "East Caribbean Dollar",
"currencySymbol": "$",
"id": "XCD"
},
"EUR": {
"currencyName": "Euro",
"currencySymbol": "€",
"id": "EUR"
}
}
}
解决方案
所以我想出了一个解决我想要实现的目标的方法,这可能不是我问题的直接答案,但它是我问题的解决方案。
我最终只是将 JSON 以不同的方式反序列化为货币列表,然后像往常一样轻松绑定。
class Currency
{
public string currencyName { get; set; }
public string currencySymbol { get; set; }
public string id { get; set; }
}
以及我如何反序列化它以适应该类,我将 JSON 解析为 JObject,然后对于每个孩子的每个孩子,我将其反序列化为我的 Currency 类。
List<Currency> cList = new List<Currency>();
HttpResponseMessage response = await client.GetAsync(urlAPI);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
JObject jo = JObject.Parse(responseBody);
var children = jo.SelectToken("results").Children();
foreach(var child in children)
{
var childrenOfChild = child.Children();
foreach(var c in childrenOfChild)
{
cList.Add(JsonConvert.DeserializeObject<Currency>(JsonConvert.SerializeObject(c)));
}
}
推荐阅读
- python - 通过 TCP/Forwarder 读取 RTU Pymodbus 数据
- html - SVG 矢量文本笔划未“完成”
- postgresql - 使用 sqlalchemy 从查询中构建“伪模型”?
- php - 我正在尝试使用 laravel 将表单上的内容更改为 mysql
- c# - 不能在我的一生中引用另一个类的列表中的变量
- php - PhpSpreadsheet 如何导出带有子标题的html?
- ocaml - 类型和编程语言:Abb 代表什么?
- bash - 如何从当前路径执行自动机脚本?
- python - 如何在电报机器人中创建“方法”
- python - seaborn.heatmap 中颜色条刻度的大小