2010-01-18 8 views
0

Je travaille sur une application WPF similaire à visio. J'aimerais pouvoir regrouper logiquement certains des éléments de mon diagramme, dont chacun est un UIElement, et contrôler certains comportements (c'est-à-dire la visibilité) au niveau du groupe. Ma première tentative à ceci était de créer un contrôle, appelé un groupe, qui avait la largeur & height = 0. Je voulais assigner à mes éléments de diagramme un "groupe" spécifique à travers leur propriété de groupe, puis lier certains UIElement propriétés à la valeur du groupe, comme ci-dessous:WPF Lier à DependencyProperty d'un autre objet?

<DiagramNode 
     Width="300" Height="300" 
     Visibility="{Binding RelativeSource={RelativeSource Self},Path=Group.Visibility}" 
     > ... </DiagramNode > 

Bien que cela ne génère pas d'erreur de liaison, cela ne fonctionne pas non plus. La modification de la visibilité du groupe n'a aucun effet sur la visibilité des noeuds affectés à ce groupe. Aucune erreur n'apparaît à tout moment autant que je peux dire, cela ne fonctionne tout simplement pas.

Des idées? Est-ce que mon approche est possible? Si non, quelqu'un a des alternatives qu'ils aimeraient suggérer :). Je ne suis pas un grand gars de l'interface utilisateur, je me sens beaucoup plus à l'aise dans une couche de service, donc je suis ouvert à d'autres suggestions.

Répondre

0

S'il n'y a vraiment pas d'erreur de liaison dans la trace de l'application lors de l'exécution du débogueur, le problème est probablement dans les notifications de modification. Vous devez vous assurer que la propriété Visibility de votre objet Group fournit des notifications de modification lorsqu'il est modifié.

Ceci est généralement effectué en implémentant INotifyPropertyChanged sur la classe, et dans l'accesseur set en levant un événement PropertyChanged (si la valeur a réellement changé).

+0

Merci pour votre réponse Aviad. Je crois que mon objet Groupe implémente INotifyPropertyChanged pour la propriété Visibility, car mon objet Group hérite de UserControl. Accepteriez-vous? – Frank

+0

Lève-t-il réellement l'événement 'PropertyChanged' dans le setter de la propriété' Visibility'? Cela doit être fait explicitement. –

+0

UserControl ne met * pas * en œuvre INotifyPropertyChanged. Toutefois, si Group est un UserControl, alors Group.Visibility est une propriété de dépendance et ne devrait donc pas avoir besoin de générer des notifications de modification pour être une source de liaison. Vous souhaiterez peut-être poster un peu plus de la définition du groupe pour aider à diagnostiquer le problème. – itowlson

0

Le problème est peut-être dans ma déclaration de propriété de l'objet Groupe de ma classe DiagramNode?

Public Class DiagramNode 
... 
Private _group As Group 
Public Property Group() As Group 
    Get 
     Return Me._group 
    End Get 
    Set(ByVal value As Group) 
     Me._group = value 
    End Set 
End Property 
... 
End Class