【问题标题】:How to display a chart with XML data in Windows phone 8 Mvvm如何在 Windows phone 8 Mvvm 中显示带有 XML 数据的图表
【发布时间】:2014-04-03 07:40:56
【问题描述】:

我正在制作一个必须从在线 XML 中按日期显示货币汇率的应用程序。 我正在使用麻雀图。使用示例数据对其进行测试时,图表仅在 ChartViewModel 函数中直接调用 GenerateDatas() 方法时才显示数据,但在读取 asinc XML 数据或使用 ICommand 调用该函数时,图表不显示或刷新。

     List<CurrencyOfDate> list = new List<CurrencyOfDate>();
            foreach (XElement c in xmlData.Elements(ns + "Cube").Elements(ns + "Cube"))
                list.Add(new CurrencyOfDate()
                {
                    Date = c.Attribute("time").Value,
                    CurrencyTypes = (from k in xmlData.Elements(ns + "Cube").Elements(ns + "Cube").Elements(ns + "Cube")
                                     select new CurrencyType()
                                     {
                                         Name = k.Attribute("currency").Value,
                                         Value = k.Attribute("rate").Value
                                     }).ToList()
                });
            FeatList = list;
            if (FeatList != null)
            {
                foreach (var date in FeatList)
                {
                    var x = DateTime.Parse(date.Date);
                    PickedDate.Add(x);
                }

                for (int i = 0; i < FeatList.Count; i++)
                {
                    CurList = FeatList[i].CurrencyTypes.ToList();
                }
            }
            MakeChartData();
}
private void MakeChartData()
    {
        try
        {
            IsDataLoading = true;
            for (int i = 0; i < CurList.Count; i++)
            {
                var selectedCurrencyRates =
                    (from c in CurList where c.Name == "GBP" select c).ToList();
                foreach (var selRate in selectedCurrencyRates)
                {
                    double parsedFromValue = Double.Parse(selRate.Value);
                        CalculatedRate.Add(parsedFromValue);
                }
            }
            GenerateDatas();
        }
        catch (Exception e)
        {
            IsDataLoading = false;
        }
        Refresh();
    }

    private void GenerateDatas()
    {
        Refresh();
        try
        {
            IsDataLoading = true;


            this.Collection.Add(new Model(PickedDate[0], CalculatedRate[0]));
            this.Collection.Add(new Model(PickedDate[10], CalculatedRate[10]));
            this.Collection.Add(new Model(PickedDate[20], CalculatedRate[20]));
            this.Collection.Add(new Model(PickedDate[30], CalculatedRate[30]));


            IsDataLoading = false;
        }
        catch (Exception ex)
        {
            IsDataLoading = false;
        }
    }

还有xaml:

     <chart:SparrowChart x:Name="Chart1" Height="409" Margin="0,0,22,0">
            <chart:SparrowChart.Legend>
                <chart:Legend Header="EUR/GBP" Height="55" Margin="155,0,172,4" Width="107" />
            </chart:SparrowChart.Legend>
            <chart:SparrowChart.DataContext>
                <viewModels:ChartViewModel/>
            </chart:SparrowChart.DataContext>
            <chart:SparrowChart.XAxis>
                <chart:LinearXAxis/>
            </chart:SparrowChart.XAxis>
            <chart:SparrowChart.YAxis>
                <chart:LinearYAxis/>
            </chart:SparrowChart.YAxis>
            <chart:LineSeries PointsSource="{Binding Collection}" XPath="X" YPath="Y" IsRefresh="True"/>
        </chart:SparrowChart>

【问题讨论】:

    标签: c# xaml windows-phone-8 mvvm


    【解决方案1】:

    问题解决了。此代码有效。问题是 Collection 是 List 类型,但它应该是 ObservableCollection。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多