0

私はバインディングソースにあまり詳しくありません。簡単な質問は次のとおりです: BindingNavigator が変更されたときにチャート表示が更新されるように、チャートをデータソースにバインドするにはどうすればよいですか?

私の長い説明は以下の通りです:

C# VS 2010 Express にインポートしたデータソースがあります。これは関連するデータセットであり、2 つのテーブル (Asset、Historical_prices) があり、各資産には関連する過去の価格のテーブルがあります。

データソースをフォームにドラッグ アンド ドロップするだけで、BindingNavigator の助けを借りて、必要なビューを作成できました。Historical_prices テーブルの DataGrid ビューもフォームにドラッグし、BindingNavigator をクリックすると更新されます。

次に、DataSource を history_pricesBindingSource として選択したフォームでグラフを作成しました。読み込みます

BindingBavigator が変更されたときに、異なる Historical_price でチャートを更新できるようにしたいのですが、現在はそうではありません。何か案は?

chart1.Update();BindingNavigatorSaveItem_Click イベントに追加しようとしましたが、サイコロはありません。

よろしくお願いします

4

1 に答える 1

0

Binding は、単に割り当てるのではなく、実際にデータバインドする必要があります。あなたが行ったことは、基本的に、初期化または値の割り当て中に実行時に発生するワンタイムバインディングを作成したことです。

これは、ソース (データソース) がビューによって作成されたときに、ターゲット (チャート) が 1 回だけ更新されることを意味します。

あなたが探しているのは双方向バインディングです。そのため、ソースが変更されるたびにターゲットが更新されます。

これを実現するには、通常、双方向バインディング構文を使用して DataSource を TargetProperty にバインドする必要があります。

<Toolkit:Chart x:Name="myChart" DataSource="{Binding historical_PricesDataSource, Mode=TwoWay}" />

ただし、更新が必要であることを UI に通知するには、データ ソースに INotifyPropertyChanged インターフェイスを実装する必要があります。

INotifyPropertyChanged を実装するためのコードは次のとおりです。

public event PropertyChangedEventHandler PropertyChanged = delegate{};

    // This method is called by the Set accessor of each property. 
    // The CallerMemberName attribute that is applied to the optional propertyName 
    // parameter causes the property name of the caller to be substituted as an argument. 
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

INotifyPropertyChanged の詳細については、http://msdn.microsoft.com/en-us/library/ms229614.aspx を参照してください。

于 2012-11-21T15:23:38.090 に答える