2011-04-01 3 views
0

J'ai un ListView avec un DataTemplate que j'ai besoin de lier à 3 sources différentes avec le même index. Je pense que je dois le faire complètement en XAML, parce que les sources (chart) existent seulement dans xaml. J'utilise le modèle MVVM. »
j'écrire pour raconter comment il « devrait » travail, l'indice i est la clé commune.Liaison de plusieurs sources à un ListView

<ListView ItemsSource="{Binding ???}"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <StackPanel> 
      <!-- Small rectangle filled with the same color as the corresponding line --> 
      <Rectangle 
       Height="10" 
       Width="10" 
       Fill="{Binding ElementName=chart, Path=Series[i].LineStroke}" /> 
      <!-- The title of the corresponding line --> 
      <TextBlock 
       x:Name="Title" 
       Text="{Binding ElementName=chart, Path=Series[i].DataSeries.Title}" /> 
      <!-- The actual value of the corresponding line on the current position--> 
      <TextBlock 
       x:Name="Value" 
       Text="{Binding ElementName=chart, Path=Behaviour.Behaviours[0].CurrentPoints[i].Y}" /> 
     </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

Vous utilisez MVVM .. alors ne devriez-vous pas créer un ** ViewModel ** pour ce cas? Classe contenant à la fois la série et le comportement. Ensuite, utilisez ce ViewModel comme source de liaison à ListView. – Damb

+0

J'ai un ViewModel qui fournit uniquement des données pour le contrôle du graphique, mais le graphique crée les couleurs et seul le graphique sait quel Y-Point est actuellement sélectionné. Et le graphique est seulement connu dans la vue, alors? – chriszero

Répondre

2

Mh, permet de voir. Et vous vous liez LISTVIEW à chart.Series cette façon, vous obtenez le bon nombre d'éléments. un, puis dans votre modèle de données vous lient les propriétés de la série. pour le comportement que vous pouvez utiliser MultiBinding et un convertisseur pour extraire les données

<ListView ItemsSource="{Binding Path=Series, ElementName=chart}"> 
<ListView.ItemTemplate> 
    <DataTemplate> 
    <StackPanel> 
     <!-- Small rectangle filled with the same color as the corresponding line --> 
     <Rectangle 
      Height="10" 
      Width="10" 
      Fill="{Binding Path=LineStroke}" /> 
     <!-- The title of the corresponding line --> 
     <TextBlock 
      x:Name="Title" 
      Text="{Binding Path=DataSeries.Title}" /> 
     <!-- The actual value of the corresponding line on the current position--> 
     <TextBlock x:Name="Value"> 
      <TextBlock.Text> 
       <MultiBinding Converter="{StaticResource ChartSeriesBehaviourConverter}"> 
       <Binding ElementName=chart/> 
       <Binding/> 
       <MultiBinding> 
     </TextBlock> 
    </StackPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 
</ListView> 

maintenant, vous devriez obtenir la chart et l'objet série en cours passé int o votre convertisseur où vous devriez être capable de faire quelque chose comme var idx = chart.Series.IndexOf(s) afin que vous puissiez accéder au point correspondant dans les comportements.