2009-11-16 5 views
1

J'utilise System.Windows.Controls.DataVisualization.Toolkit pour les cartes dans mon WPF application. Le code de carte est:WPF faire des graphiques interactifs

<chartingToolkit:Chart> 
         <!-- Volume --> 
         <chartingToolkit:LineSeries 
          Title="Volume (M)" 
          ItemsSource="{StaticResource StockDataCollection}" 
          IndependentValuePath="Date" 
          DependentValuePath="Volume"/> 
         <!-- Price --> 
         <chartingToolkit:LineSeries 
          Title="Price ($)" 
          ItemsSource="{StaticResource StockDataCollection}" 
          IndependentValuePath="Date" 
          DependentValuePath="Price"/> 
         <chartingToolkit:Chart.Axes> 
          <!-- Axis for custom range --> 
          <chartingToolkit:LinearAxis 
           Orientation="Y" 
           Minimum="0" 
           Maximum="100" 
           ShowGridLines="True"/> 
          <!-- Axis for custom labels --> 
          <chartingToolkit:DateTimeAxis 
           Orientation="X"> 
           <chartingToolkit:DateTimeAxis.AxisLabelStyle> 
            <Style TargetType="chartingToolkit:DateTimeAxisLabel"> 
             <Setter Property="StringFormat" Value="{}{0:MMM d}"/> 
            </Style> 
           </chartingToolkit:DateTimeAxis.AxisLabelStyle> 
          </chartingToolkit:DateTimeAxis> 
         </chartingToolkit:Chart.Axes> 
        </chartingToolkit:Chart> 

Je veux que l'utilisateur soit en mesure de cliquer série de ligne à tout moment et faites-le glisser vers le haut ou vers le bas et donc la valeur sera modifiée? Cela ressemble à une liaison de données bidirectionnelle mais je ne sais pas comment faire.

Répondre

1

Le contrôle de graphique WPF Toolkit n'a aucun code pour gérer le déplacement de la souris, vous devrez donc l'écrire vous-même.

Vous devriez être en mesure de sous-classer LineDataPoint pour ajouter la fonctionnalité de déplacement, puis sous-classe LineSeries et remplacer CreateDataPoint() pour créer vos éléments LineDataPoint personnalisés.

Dans ce cas, votre ItemsSource ne serait pas un IEnumerable de valeurs (par exemple, IEnumerable<decimal>), mais plutôt d'objets détenteurs de valeur (par exemple IEnumerable<MyValueObject>). Les objets de détenteur de valeur ont une propriété qui peut être utilisée pour extraire ou définir la valeur à ce point. Autoriser la mise à jour de la valeur en affectant DependentValueBinding à une liaison TwoWay à votre propriété. Vous pouvez peut-être réutiliser des objets existants dans votre application plutôt que de créer un objet détenteur de valeur spécifiquement à cette fin.

Questions connexes