如何动态更新 WPF ToolKit 图表控件的数据源?在以下示例中,我使用 {Binding SomeText} 成功更新了 TextBlock.Text 属性,并将 MainWindow 的 DataContext 设置为属性 Input。(请看下面的代码)
TextBlock.Text 绑定到 Input.SomeText 并且图表假设使用 Input.ValueList 作为数据源。
图表仍然是空的。放置一次能填满
lineChart.DataContext = Input.ValueList;
在主窗口构造函数中并将 XAML 中的绑定设置为 ItemsSource="{Binding}"。但这仅在启动时有效,例如,当您单击按钮时它不会更新。我想在应用程序使用新传入数据运行时更新图表。
我有以下 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 得到更新,并确保 ValueList 发生变化,我将 ValueList.Count 放在文本块中,您可以看到计数在上升,但图表保持不变。
所以这导致 1 成功绑定(但不更新):
lineChart.DataContext = Input.ValueList;
ItemsSource="{Binding}"
这根本不绑定:
ItemsSource="{Binding ValueList}"