来自 xamarin.forms 中的 XML 文件的绑定值



我想将我联机的 XML 文件中的值绑定到我的 XAML 代码中,在应用中显示该值。

我的应用程序非常简单。

我使用 XDocument 读取带有货币汇率的 xml 文件。我想在线选择在 xml 中如下所示的USD_Sell值。

<row>
  <swift_code>USD</swift_code>
  <swift_name>american Dollar</swift_name>
  <multiply>1</multiply>
  <buy_cash>8,5199</buy_cash>
  <buy_tc>8,2643</buy_tc>
  <sell_cash>9,3801</sell_cash>
  <sell_tc>9,4739</sell_tc>
</row>

那么到目前为止,我的主要方法仅如下所示。

using Xamarin.Forms;
using System.Xml.Linq;
namespace CurrencyConverter
{
public partial class CurrencyConverterPage : ContentPage
{
    public CurrencyConverterPage()
    {
        InitializeComponent();
    }
    static void Main(string[] args)
    {
        XDocument xmlDoc = XDocument.Load("http://www.forex.se/ratesxml.asp? id=492");
    }
  }
}

而我的 XAML 看起来像这样。

<Label  Text="USD Sell" 
       TextColor="Black"
       Font="Medium"
       HorizontalOptions="Center"/>
<Label  Text="{Binding USDSell}" 
       TextColor="Black"
       Font="Medium"
       HorizontalOptions="Center"/>

解析 XML 以绑定到 C# 类,我使用

http://xmltocsharp.azurewebsites.net/

要得到

[XmlRoot(ElementName = "row")]
public class Row
{
    [XmlElement(ElementName = "swift_code")]
    public string Code { get; set; }
    [XmlElement(ElementName = "sell_cash")]
    public string SellCash { get; set; }
    [XmlElement(ElementName = "sell_tc")]
    public string SellTc { get; set; }
}
[XmlRoot(ElementName = "web_dis_rates")]
public class WebRates
{
    [XmlElement(ElementName = "row")]
    public List<Row> Rows { get; set; }
}

现在,您可以使用 HttpClient 和 StreamReader 将其反序列化回对象:

async Task<Row> GetRow()
{
    XmlSerializer xs = new XmlSerializer(typeof(WebRates));
    using (HttpClient client = new HttpClient())
    {
        using (StreamReader reader = new StreamReader(await client.GetStreamAsync("http://www.forex.se/ratesxml.asp?id=492")))
        {
            WebRates root = (WebRates)xs.Deserialize(reader);
            return root.Rows.FirstOrDefault(x => x.Code == "USD");
        }
    }
}

现在可以将 ItemsSource 设置为 GetRows,并在 XAML 中绑定到行属性。

链接到 Xamarin 论坛中的响应:https://forums.xamarin.com/discussion/comment/248361#Comment_248361

var document = XDocument.Load("http://www.forex.se/ratesxml.asp? id=492");
var row = document.Descendants("row").FirstOrDefault();
if(row != null)
{
    var sellCash = row.Element("sell_cash")?.Value;
    USDSellLabel.Text = sellCash;
}

使用 DescendantsElements 查找要查找的节点的适当值。

最新更新