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

时间:2017-01-24 20:01:09

标签: c# xml xaml xamarin xamarin.forms

我想将我上网的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"/>

2 个答案:

答案 0 :(得分:0)

解析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绑定到Row属性。

答案 1 :(得分:0)

链接到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查找您正在寻找的节点的正确值。