WPF Toolkit et le Data Binding pour les graphiques
Bonsoir,
J'ai besoin d'afficher des données sur des graphiques avec le WPF Toolkit.
Je suis donc tombé sur ce tutoriel. On y voit la création des graphiques à l'initialisation de l'application.
Seulement voila, je souhaite faire en sorte que les données soient mises à jour suite à une interaction utilisateur. (Plus précisément, les données utilisées pour le graphique sont chargées depuis un fichier différent en fonction de la saisie utilisateur).
J'ai donc fait un essai, que voici :
XAML (j'ai uniquement gardé le LineChart et ajouté button1)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <Window x:Class="WpfToolkitChart.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="462" Width="737" xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" Margin="0,-28,0,28">
<Grid Height="921">
<chartingToolkit:Chart Name="lineChart" Title="Line Series Demo" VerticalAlignment="Top" Margin="24,21,26,0" Height="295" >
<chartingToolkit:LineSeries DependentValuePath="Value" IndependentValuePath="Key" ItemsSource="{Binding}" IsSelectionEnabled="True" Title="Serie"/>
</chartingToolkit:Chart>
<Button Content="Serie + 5" Height="54" HorizontalAlignment="Left" Margin="147,351,0,0" Name="button1" VerticalAlignment="Top" Width="159" Click="button1_Click" />
</Grid>
</ScrollViewer>
</Window> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| namespace WpfToolkitChart
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
showColumnChart();
}
private void showColumnChart()
{
List<KeyValuePair<string, int>> valueList = new List<KeyValuePair<string, int>>();
valueList.Add(new KeyValuePair<string, int>("Developer", 100));
valueList.Add(new KeyValuePair<string, int>("Misc", 20));
valueList.Add(new KeyValuePair<string, int>("Tester", 50));
valueList.Add(new KeyValuePair<string, int>("QA", 30));
valueList.Add(new KeyValuePair<string, int>("Project Manager", 40));
lineChart.DataContext = valueList;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
List<KeyValuePair<string, int>> list = new List<KeyValuePair<string, int>>();
List<KeyValuePair<string, int>> serie = (List<KeyValuePair<string, int>>) lineChart.DataContext;
foreach ( KeyValuePair<string, int> pair in serie )
{
list.Add(new KeyValuePair<string, int> (pair.Key, pair.Value + 5)); // simulation d'un changement de données
}
lineChart.DataContext = list;
}
}
} |
Cette version marche tout à fait, mais j'aimerais savoir s'il n'existe pas une façon de faire du Data Binding dans le code XAML et non dans le côté C# (qui passe par un gestionnaire d'évènements). Qu'en est-il ? Je vous en remercie par avance.
PS : Je débute avec WPF mais pas C#