2010-01-18 5 views
3

J'ai un modèle de contrôle personnalisé pour une ListView qui met une ligne supplémentaire dans pour chaque enregistrement, thats défini quelque chose comme ça dans Window.Resources ...se lier à une méthode dans le code derrière

<ControlTemplate TargetType="ListBoxItem"> 
    <Border> 
     <StackPanel> 
      <GridViewRowPresenter> 
      <TextBlock Name="myTextBlock" /> 
     </StackPanel> 
    </Border> 
    <ControlTemplate.Triggers> 
     //Triggers here 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

Mon problème est que je veux lier le texte dans le TextBlock à un différentItemsSource que celui qui sera lié au ListBox réel quand son instancié. La liaison par programme est impossible. J'ai essayé de substituer le TextBlock pour un autre ListView et de lier à une méthode, mais je n'ai pas pu trouver comment utiliser ObjectDataProvider et lier à une méthode dans mon code derrière (qui contient une méthode qui retournerait une liste de choses que je veux se lier aussi), mais a également rencontré des problèmes avec cela.

Une étape rapide à pas dans le cas où je ne suis pas clair:

  • J'ai un modèle ListView qui ajoute une ligne supplémentaire pour chaque enregistrement

  • Ce ListView sera lié à (disons) une collection d'objets Foo. Le problème est que je veux ensuite lier la ligne supplémentaire à une source d'articles complètement différente de la ListView principale. Il ne semble pas que je peux le faire à partir de mon modèle:/

Alors - est-il un moyen de tout droit lier aux résultats d'une méthode définie dans mon code derrière, que je pouvais faire référence dans le modèle ?

Répondre

1

Ok, qui est l'idée:

1) créer la zone de liste qui est lié à Foo avec un tel modèle d'élément:

------------- 
| DATA HERE | 
|   | 
------------- 

2) créer zone de liste qui est lié à completely different itemsource avec un tel article template:

------------- 
|   | 
| DATA HERE | 
------------- 

3) trace la première zone de liste derrière la seconde.

S'il y a le même nombre d'éléments (ce qui est votre cas si je comprends bien), vous obtiendrez l'effet visuel que vous voulez. J'espère que ça aide.

EDIT
Cette méthode ne correspond pas à votre modèle actuel, mais il est une variante de la solution.

+0

Si vous allez dans cette voie, vous aurez également besoin de vous soucier de coiffer les listboxes afin que le recouvrement n'est pas apparente, ainsi que la synchronisation des sélections afin que la sélection d'un élément dans la première zone de liste efface la sélection dans la seconde. Et vous aurez besoin d'une logique de fantaisie si vous voulez l'accessibilité du clavier ... –

+0

oui, bien sûr, Nicholas Armstrong a raison, mais ce n'est pas aussi compliqué qu'il semble au premier coup d'oeil. – levanovd

+0

La fonctionnalité du clavier n'est pas un problème du tout, mais je vois comment cela serait difficile. Je n'ai jamais pensé que je devrais commencer à modifier ma conception initiale pour rendre la chose plus facile. – MoominTroll

Questions connexes