どのようにWPF ToolKit chartcontrolのデータソースを動的に更新できますか?次の例では、{Binding SomeText}を使用してTextBlock.Textプロパティを正しく更新し、MainWindowのDataContextをプロパティInputに設定します。 (下のコードを参照してください)WPF Toolkitチャートのitemsourceをパブリックプロパティに動的にデータバインドする方法はありますか?
TextBlock.TextはInput.SomeTextにバインドされ、ChartはInput.ValueListをデータソースとして使用すると想定しています。
グラフは空のままですが、私は、メインウィンドウのコンストラクタに
lineChart.DataContext = Input.ValueList;
を配置することで一度それを埋めると「{}バインディング」=のItemsSourceにXAMLでバインディングを設定することができます。しかし、これは起動時にのみ機能し、たとえばボタンをクリックすると更新されません。アプリケーションが新しい受信データで実行されている間、グラフを更新したいと思います。
私は、次のXAML持っている:コード付き
<chartingToolkit:Chart Name="lineChart">
<chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding ValueList}">
</chartingToolkit:LineSeries>
</chartingToolkit:Chart>
<Button Width="100" Height="24" Content="More" Name="Button1" />
<TextBlock Name="TextBlock1" Text="{Binding SomeText}" />
:
class MainWindow
{
public DeviceInput Input;
public MainWindow()
{
InitializeComponent();
Input = new DeviceInput();
DataContext = Input;
lineChart.DataContext = Input;
Input.SomeText = "Lorem ipsum.";
}
private void Button1_Click(System.Object sender, System.Windows.RoutedEventArgs e)
{
Input.AddValues();
}
}
public class DeviceInput : INotifyPropertyChanged
{
private string _SomeText;
public string SomeText {
get { return _SomeText; }
set {
_SomeText = value;
OnPropertyChanged("SomeText");
}
}
public List<KeyValuePair<string, int>> ValueList {get; private set;}
public DeviceInput()
{
ValueList = (new List<KeyValuePair<string, int>>());
AddValues();
}
public void AddValues()
{
//add values (code removed for readability)
SomeText = "Items: " + ValueList.Count.ToString();
OnPropertyChanged("ValueList");
}
public event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged;
private void OnPropertyChanged(String info)
{
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}
SomeTextが更新され、私はTextBlock内ValueList.Countを配置し、あなたが見ることができることを確認してValueListの変更を行うことをしかし、チャートは同じままです。
だから、これは1結合succesfullの(しかし、doesntの更新)になり:
lineChart.DataContext = Input.ValueList;
ItemsSource="{Binding}"
これは全く結合しない:
ItemsSource="{Binding ValueList}"
ValueListをプロパティにすることは役に立たないようです。私は既にあなたが共有したリンクを読みました。そこに記載されている方法で、私はデータを1回バインドすることができます。上で述べたように、テキストボックスはうまく更新されます。何が間違っているxamlの何かになることができますか? – Ben
私は今、valuelistをポパッティーにして、このようなインスタンスにdatacontextを設定しました: DataContext = Input; lineChart.DataContext =入力。 なぜ1度だけバインドするのですか? // EDIT:ItemsSource = "{Binding ValueList}"は一度だけバインドされますが、値を追加すると更新されません。 – Ben
私の編集2を参照してください。でも、observablecollectionを使用していないため、addvaluesメソッドにも問題があると思います。 – blindmeis