2016-07-12 1 views
2

J'utilise LiveChart Library et j'ai un problème pour afficher les graphiques. En effet, dans ma fenêtre, je veux beaucoup de graphiques avec de nombreux types, donc j'utilise un DataTemplateSelector, un lien vers une classe pour chaque type de graphique. Mais, quand le graphique apparaît, il n'y a pas de données à ce sujet. J'ai essayé d'ajouter DataContext="{Binding}" dans la déclaration de mon "Column Graph" mais sans succès.CartesianChart (Live-Charts) ne fonctionne pas avec DataTemplate

Voici un extrait de mon code:

ResultView.xaml

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
    <FrameworkElement.Resources> 

     <DataTemplate x:Key="graphEmptyTemlpate"> 
      <StackPanel Width="Auto" Height="60" Orientation="Horizontal" MaxWidth="700"> 
       <TextBlock Text="{Binding name}" VerticalAlignment="Center" TextAlignment="Center" FontSize="20" Margin="0,0,0,0" Foreground="#FF006B93"/> 
      </StackPanel> 
     </DataTemplate> 

     <DataTemplate x:Key="columnTemplate"> 
      <StackPanel Background="#FFBFBFBF"> 
       <TextBlock Text="{Binding title}"/> 
       <TextBlock Text="{Binding subTitle}"/> 
       <lvc:CartesianChart Width="400" Height="400" Series="{Binding listSeries}"> 
       </lvc:CartesianChart> 
      </StackPanel> 
     </DataTemplate> 

     <local:GraphTemplateSelector 
     ColumnTemplate="{StaticResource columnTemplate}" 
     GraphEmptyTemplate="{StaticResource graphEmptyTemlpate}" 
     x:Key="graphTemplateSelector" /> 

    </FrameworkElement.Resources> 
    <StackPanel Orientation="Horizontal" > 
     <ItemsControl ItemsSource="{Binding Results}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Expander Header="{Binding Title}" 
           IsExpanded="True" 
           Margin="10 10 10 10" 
           FontSize="20" 
           Foreground="White"> 
         <ItemsControl ItemsSource="{Binding Items}" 
             ItemTemplateSelector="{DynamicResource graphTemplateSelector}"> 
          <ItemsControl.ItemsPanel> 
           <ItemsPanelTemplate> 
            <WrapPanel Margin="10 10 10 10" Orientation="Vertical"/> 
           </ItemsPanelTemplate> 
          </ItemsControl.ItemsPanel> 
         </ItemsControl> 
        </Expander> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </StackPanel> 
</ScrollViewer> 

le constructeur de ma classe ViewModel est en ResultViewModel.cs Dans le XAML, les résultats correspondent aux résultats en C#, correspond Articles à RpAgitation.Items en C#

public ResultsViewModel() 
{ 
    instance = this; 
    this.Results = new ObservableCollection<ResultParts>(); 
    this.RpAgitation = new ResultParts("Results of the Agitation part"); 

    ColumnGraph gr = new ColumnGraph(); 
    RpAgitation.Items.Add(gr); 

    this.Results.Add(_rpAgitation); 

} 

et finnaly les ColumnGraph.cs

public class ColumnGraph : IGraph 
{ 
    public SeriesCollection listSeries { get; set; } 

    public ColumnGraph() 
    { 
     listSeries = new SeriesCollection 
     { 
      new LineSeries 
      { 
       Title = "Series 1", 
       Values = new ChartValues<double> { 4,7,8,9,5,4,2} 
      } 
     }; 
    } 
} 

Merci pour votre aide,

+0

Merci pour l'ouverture de la question dans la mise en pension, je fixerai dès que possible –

+0

c'est déjà corrigé depuis la version 0.7.7 –

+0

Merci beaucoup! – bobbinch

Répondre

0

classe actuellement SeriesCollection dans pas un élément UiFramework WPF, je veux vraiment didnt, mais je suppose que nous devons pas le faire pour éviter ce problème.

Je ne suis pas sûr si c'est un bug avec WPF, ou juste nous faisons quelque chose de mal.

toutes façons, je vais étudier plus avant, pour l'instant une alternative est d'essayer cette syntaxe:

DataSource = new List<ChartValues<double>> 
     { 
      new ChartValues<double> {r.Next(0, 10), r.Next(0, 10), r.Next(0, 10)}, 
      new ChartValues<double> {r.Next(0, 10), r.Next(0, 10), r.Next(0, 10)}, 
      new ChartValues<double> {r.Next(0, 10), r.Next(0, 10), r.Next(0, 10)} 
     }; 

     DataContext = this; 

Et Le XAML

<ItemsControl ItemsSource="{Binding DataSource}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <lvc:CartesianChart Height="400"> 
         <lvc:CartesianChart.Series> 
          <lvc:LineSeries Values="{Binding}"></lvc:LineSeries> 
         </lvc:CartesianChart.Series> 
        </lvc:CartesianChart> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl>