我有一个使用 Telerik 图表的 Silverlight 应用程序。
在我看来,我有 xaml 中的图表。在视图后面的代码中,我有这样的内容:
public partial class MyView : UserControl
{
private MyViewModel viewModel;
public MyView()
{
InitializeComponent();
CreateChartMappings(); // Creates the SeriesMappings for my chart
viewModel = new MyViewModel();
Chart1.ItemsSource = viewModel.MyChartData;
DataContext = viewModel;
Resources.Add("ViewModel", viewModel);
}
}
在我的 ViewModel 我有这个:
public class MyViewModel : INotifyPropertyChanged
{
private ObservableCollection<ChartData> myChartData;
public ObservableCollection<ChartData> MyChartData
{
get { return myChartData; }
set { myChartData= value; OnPropertyChanged("MyChartData"); }
}
public MyViewModel()
{
MyWebServiceClient service = MyWebServiceClient.CreateInstance();
service.GetChartDataCompleted +=
new EventHandler<GetChartDataCompletedEventArgs>(GetChartDataCallback);
service.GetChartDataAsync();
}
private void GetChartDataCallback(object sender, GetChartDataCompletedEventArgs e)
{
if (e.Error == null)
{
MyChartData = e.Result;
}
}
}
我确定 GetChartData 将返回可用于图表的正确键入的数据,并看到 GetChartDataCallback 确实在 e.Result 中返回结果,但我不知道如何将该数据加载到我的图表中。
如果我做类似 Chart1.ItemsSource = viewModel.MyChartData; 在我确定服务返回数据之后,数据可以正常加载到图表中。例如,如果我在视图中创建一个调用该代码行的按钮,它会将服务中的数据加载到图表中。
此外,如果我用普通方法调用替换 asyc 调用,它也可以正常工作,所以我的问题可能与没有正确处理 asyc 调用有关?