Obtenir la valeur d'une propriété dans le Parent de contrôle de l'Utilisateur à partir d'un Enfant de contrôle de l'utilisateur
J'ai un ChildUserControl qui est chargé à l'intérieur d'un ParentUserControl. Le chargement de la page d'accueil ParentUserControl.
J'aurais besoin d'accéder à des propriétés dans ParentUserControl de la ChildUserControl.
Merci pour votre temps
Dans quelle plate-forme / langue?
OriginalL'auteur | 2009-01-21
Vous devez vous connecter pour publier un commentaire.
La plate-forme de la langue /etc n'est pas clair, si cette réponse est nécessairement vague... cependant, en général, un enfant de contrôle ne peut pas accéder aux propriétés de la société mère (directement), car beaucoup de différents types de contrôles parent pourrait être l'hébergement de l'enfant de contrôle. L'enfant ne doit pas être codé en dur pour un parent seul, sinon il pourrait aussi bien être partie de la société mère.
Généralement, vous voudrez peut-être essayer de tout simplement supprimer l'exigence - ça sonne comme une étrange conception. Cependant, certains cadres de support de quelque chose comme - par exemple, les propriétés de dépendance dans WPF.
Une interface basée sur le design (pour le parent(s)) est une approche, mais ce n'est pas très propre. Pour .NET, événements, etc sont une autre façon pour un enfant de communiquer avec un parent - enfant expose des événements qui différents les parents peuvent consommer de différentes façons.
Autre que cela, vous êtes dans le territoire de tests/moulage de la société mère (que ce soit contre une classe ou une interface) pour accéder aux détails de la mère - par exemple:
(on pourrait aussi utiliser une interface ici; encore un peu hacky de toute façon...)
Personnellement, plutôt que d'utiliser ce type de fonte de l'enfant, je préfère le parent à prendre le contrôle; le parent définit les propriétés de l'enfant, et à l'écoute des événements (plutôt que de l'enfant, définissez les propriétés de retour sur le parent):
De cette façon, l'enfant ne sait pas ou se soucient de la mère. Tous il sait qu'il a des propriétés (etc), et peut informer d'autres personnes à des changements intéressants.
OriginalL'auteur Marc Gravell
Il est possible d'accéder à la mère de l'enfant contrôle de la via ((ParentType)Moi.Parent). Ce n'est pas recommandé. Il n'y a aucun moyen de savoir que le contrôle ne serait pas utilisé sur la page d'un autre/de contrôle. Le compilateur ne serait pas attraper cette, cette distribution serait la cause d'une exception à l'exécution.
La meilleure façon de gérer cela pourrait être pour les parents de fournir tous les renseignements que l'enfant contrôle besoins(création de propriétés publiques ou des méthodes sur les contrôles). Cela pourrait même dire que le parent de contrôle fournit une référence fortement typée de lui-même à l'enfant de contrôle (éventuellement par l'intermédiaire d'une interface). De cette façon, le compilateur s'assure que vous n'auriez pas un cas où l'enfant de contrôle a été en supposant un parent de type incorrect.
OriginalL'auteur Jim Petkus
Désolé de ne pas être clair. La plate-forme est .NET et le langage C#.
J'ai un seul parent qui héberge plusieurs enfants de contrôle. C'était une façon de réaliser les visuels de l'héritage en C# comme il y avait un certain nombre de contrôles d'INTERFACE utilisateur qui ont été partagés entre les enfants.
Par le design de l'interface, suggérez-vous que la société mère et à l'enfant(s) à mettre en œuvre une interface commune?
winform? webform? wpf? mvc?
OriginalL'auteur
Vous pouvez utiliser la Réflexion comme ceci:
Que simple extension de la méthode qui s'étend de "Contrôle", mais vous pouvez facilement mettre ce sur quoi que ce soit (je l'ai utilisé sur
object
quand j'ai été en passant anonyme classes, ce qui est en soi une mauvaise idée!)L'utilisation serait alors:
OriginalL'auteur Aaron Powell
Vous pouvez utiliser le
this.Parent
biens de l'enfant, le contrôle, mais si vous cherchez un bon OO solution que vous ne le soit pas. En permettant à l'enfant de savoir quelque chose au sujet de la mère finit par lier d'une certaine façon et les limites de la réutilisation. Dans la plupart des cas ce n'est de l'intérêt dans la théorie et si vous frapper certains rapide d'un site unique, vous pouvez violer comme les besoins. Mais la plus adéquate consiste à utiliser basée sur les événements de communication.OriginalL'auteur Donald Byrd
Merci pour les réponses.
Je vais réfléchir à la Réflexion. Cependant, j'ai entendu dire qu'il a un goulot d'étranglement des performances.
Jim - vous dire:
~~
La meilleure façon de gérer cela pourrait être pour les parents de fournir tous les renseignements que l'enfant contrôle besoins(création de propriétés publiques ou des méthodes sur les contrôles). Cela pourrait même dire que le parent de contrôle fournit une référence fortement typée de lui-même à l'enfant de contrôle (éventuellement par l'intermédiaire d'une interface). De cette façon, le compilateur s'assure que vous n'auriez pas un cas où l'enfant de contrôle a été en supposant un parent de type incorrect.
~~
Dans ma situation, à la fois le parent et l'enfant(s) implémentent la même interface. Est-ce une mauvaise conception? Si j'ajoute une propriété d'un parent de référence dans l'interface, serait-il travailler considérant que le parent met en œuvre la même interface que le bien?
OriginalL'auteur
Si vous avez 2 imbriqués les contrôles de l'utilisateur (UC) :
UC1.ascx
|— UC2.ascx
Dans UC1.ascx vous définissez une fonction publique ou une propriété qui ne de ce que vous avez besoin de :
fnUC1(param)
Dans UC2.ascx vous cand parvenir à cette fonction par l'intermédiaire de ce code :
CType(Parent.Parent,UC1).fnUC1(param)
Si votre UC2 de contrôle est à l'intérieur d'un conteneur (comme un répéteur de), vous devez quitter aussi à partir de ce conteneur, et ainsi, le code sera :
CType(Parent.Parent.Parent,UC1).fnUC1(param)
J'avoue c'est pas "l'état de l'art"... mais ça marche pour les contrôles imbriqués qui travaillent toujours ensemble, comme parent (UC1) /enfant (UC2) les données de l'affichage.
Espère que ce sera utile.
Pierre.
OriginalL'auteur Pierre