0

グラフ上にポイントをプロットするだけのSilverlightアプリケーションがあります。プロットするポイントは、SQLクエリから取得されます。

Silverlightプログラムは、クエリを実行し、関連するデータを独自にプルする必要があります。

この種の機能を実現するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

1秒/分あたりのデータを何回プロットする必要があるかはわかりませんか?一度プロットするだけですか。その場合、アプリが最初に読み込まれるときに非同期呼び出しを記述し、呼び出しクエリsqlを実行して、結果をコールバックに返します。

プログラムが設定された間隔でデータを返す必要がある場合は、ディスパッチャタイマーなどが必要になります。

このようなものでOK。

public class MyClass : INotifyPropertyChanged
{
    public MyClass()
    {
        DispatcherTimer timer = new DispatcherTimer();
        timer.Tick += OnTimerTick;
        timer.Interval = TimeSpan.FromSeconds(300);
    }

private void OnTimerTick(object sender, EventArgs e)
    {
        var result = await UpdateGraphPoints();
        MyGraphPoints = this.PopulateTheGraph(result);
    }

    private async Task<List<MyGraphPoint>> UpdateGraphPoints()
    {
        var oper = await YourDatabaseQueryMethod();
        return oper;
    }

    private ObservableCollection<MyGraphPoint> PopulateTheGraph(object result)
    {

    }

    private ObservableCollection<MyGraphPoint> myGraphPoints;

    public ObservableCollection<MyGraphPoint> MyGraphPoints
    {
        get { return this.myGraphPoints; }
        set
        {
            myGraphPoints = value;
            OnPropertyChanged("MyGraphPoints");
        }
    }

private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}

public class MyGraphPoint : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private int xValue;

    public int XValue
    {
        get { return xValue; }
        set
        {
            this.xValue = value;
            this.OnPropertyChanged("XValue");
        }
    }

    private int yValue;

    public int YValue
    {
        get { return yValue; }
        set
        {
            this.yValue = value;
            this.OnPropertyChanged("YValue");
        }
    }

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

次に、xamlで-MyGraphPoints監視可能コレクションをグラフコントロールにバインドします。

于 2012-12-08T18:02:52.053 に答える