IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Injection de dépendance avec MVVM => Boucle infinie


Sujet :

Silverlight

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut Injection de dépendance avec MVVM => Boucle infinie
    Bonjour,

    Je travail sur une application Silverlight utilisant le pattern MVVM et l'injection de dépendance.

    Je me heurte a un cas un peu particulier où mes injections de dépendance partent en boucle infinie.

    Voici la structure : (légende : <= signifie injecté)

    ViewA <= ViewModelA <= ViewB <= ViewModelB <= ViewModelA

    Explications :
    - le ViewModelA est injecté dans la ViewA (normal)
    - le ViewModelB est injecté dans la vueB (normal aussi)
    - la ViewB est injecté dans le ViewModelA car celui-ci l'expose comme propriété (peut-être bizarre)
    - le ViewModelA est injecté dans le ViewModelB car une commande exposée par celui-ci agit sur le ViewModelA

    J'ai bien conscience que le problème en lui même est lié aux différentes associations et au fait que tout est injecté, mais peut-être y a-t-il une subtilité qui m'aurait échappé et que finalement il y a un moyen de régler tout ça.

    La première chose qui m'est venue à l'idée a été d'essayé de faire passer l'une des associations via un constructeur mais les constructeurs des Views ne prennent pas de paramètre...

    Merci pour votre aide

  2. #2
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,
    essaie de simplifier ton architecture, le fait que "viewmodelA" apparaisse deux fois dans ton petit schéma n'est pas normal.
    Si c'est trop tard, ou si c'est justifié par autre chose, essaie de passer par une 3eme dll (par ex. qui expose des interfaces implémentées par les viewmodel), pour casser les dépendances. Tu vas du coup perdre en simplicité, ça dépend de ton projet.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bizarre ton histoire
    L'injection de dépendance c'est bien, mais faut pas en abuser... et là à mon avis tu en abuses largement !

    - la ViewB est injecté dans le ViewModelA car celui-ci l'expose comme propriété (peut-être bizarre)
    oui, très bizarre... un ViewModel n'a aucune raison d'entendre parler de la vue, ça ne le concerne pas ! La vue utilise le ViewModel, mais le ViewModel est totalement indépendant de la vue !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Effectivement, je me doutais que ce n'était pas la bonne solution, mais je n'ai pas trouvé d'autre moyen, je m'explique :

    En fait, tous mes ViewModel sont injectés dans leur vue respective, le soucis, c'est que si dans le XAML de ma ViewA, j'insère un ViewB, alors le constructeurde ViewB est appelé par la méthode InitializeComponent() de ViewA mais l'injection du ViewModelB dans ViewB ne se fait pas...

    La solution que j'ai trouvée est en fait de ne pas mettre directement ViewB dans le XAML de ViewA mais plutôt un <ContentControl> dont je bind le Content avec la ViewB injectée dans ViewModelA et exposée comme propriété.

    Disons, que cette solution ne me plait pas vraiment mais que j'aurais certainement à l'utiliser à un moment donné car j'ai une ComboBox qui permet de choisir entre plusieurs ViewB, ViewB devra donc bel et bien être exposé comme propriété par ViewModelA, non ?

    Toutefois, j'aimerais pouvoir éviter l'injection des View filles dans le ViewModel père autant que possible, donc si vous avez également une solution pour permettre l'injection de tous les ViewModels dans les Views en cascade, je suis preneur aussi


    Merci

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Si la ViewA contient une ViewB, je suppose que le ViewModelA (appelons le A) contient un ViewModelB (B) ? Dans ce cas le plus simple c'est de mettre un ContentControl dans la ViewA, dont le contenu est bindé sur la propriété A.B, et avec le ContentTemplate qui va bien :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ContentControl Content="{Binding B}">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <v:ViewB />
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Jusqu'a présent, je n'incluait pas les ViewModels fils dans le ViewModel père, c'est effectivement une bonne solution pour régler le problème de la boucle infinie et ça semble plus logique que d'inclure une View. Ca m'oblige seulement a créer mes instances de ViewModels dans App.xaml.cs et de les enregistrer comme unique instance avec Unity.

    J'espère ne pas abuser de votre temps en soumettant un autre problème :

    Je veux maintenant pouvoir choisir le Content du ContentControl, qu'il puisse être soit une ViewB, soit une ViewC suivant la valeur sélectionnée par la Combobox. Je pense que je peux faire hérité ViewModelB et ViewModelC d'une même classe (ViewModelBC par exemple), mais quid de la View ? Peut-être puis-je créer une propriété DataTemplate dans mon ViewModel puis binder le ContentTemplate vers celle-ci.

    Il existe peut-être d'autres solutions préférables à celle-ci ?

    Merci.

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Stunt_las Voir le message
    Je veux maintenant pouvoir choisir le Content du ContentControl, qu'il puisse être soit une ViewB, soit une ViewC suivant la valeur sélectionnée par la Combobox.
    Tu définis 2 DataTemplate qui seront appliqués aux instances de types ViewB et ViewC. Ensuite, tu as juste à remplir ton ContentControl avec l'instance qui te plait. A l'exécution, le runtime SL choisira, pour toi, le bon template.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Quelque chose comme ça ?

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ContentControl Content="{Binding BC}">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <v:ViewB />
            </DataTemplate>
            <DataTemplate>
                <v:ViewC />
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

    Il ne semble pas possible de définir plusieurs DataTemplate pour un même ContentControl.

    Je ne vois pas comment le runtime peut savoir que la ViewB doit être utilisé avec le ViewModelB et la ViewC avec le ViewModelC automatiquement ?

    De plus, je souhaiterais n'avoir aucune action à faire dans le code behind de ViewA, il faudrait donc que tout se fasse par binding vers les propriétés du ViewModelA.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Stunt_las Voir le message
    Il ne semble pas possible de définir plusieurs DataTemplate pour un même ContentControl.
    Non, c'est pas possible

    Citation Envoyé par Stunt_las Voir le message
    Je ne vois pas comment le runtime peut savoir que la ViewB doit être utilisé avec le ViewModelB et la ViewC avec le ViewModelC automatiquement ?
    Il suffit de mettre les deux DataTemplate dans les ressources du ContentControl, et de rien mettre comme ContentTemplate. WPF prendra automatiquement celui qui correspond au type du Content

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Il suffit de mettre les deux DataTemplate dans les ressources du ContentControl, et de rien mettre comme ContentTemplate. WPF prendra automatiquement celui qui correspond au type du Content
    Mais justement, ce qui est bindé au Content du ContentControl, c'est le ViewModelB ou le ViewModelC suivant la valeur sélectionnée dans la ComboBox et non ViewB ou ViewC. Je ne pense donc pas que le runtime saura quoi afficher.

    D'ailleurs après test, ce qui s'affiche en lieu et place de ma ViewB semble être le résultat de la méthode ToString() de ViewModelB.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Stunt_las Voir le message
    Mais justement, ce qui est bindé au Content du ContentControl, c'est le ViewModelB ou le ViewModelC suivant la valeur sélectionnée dans la ComboBox et non ViewB ou ViewC. Je ne pense donc pas que le runtime saura quoi afficher.

    D'ailleurs après test, ce qui s'affiche en lieu et place de ma ViewB semble être le résultat de la méthode ToString() de ViewModelB.
    Alors binde le ContentControl sur l'élément actuellement sélectionné...

    Soit directement sur le ComboBox :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ContentControl Content="{Binding SelectedItem, ElementName=theComboBox}">

    Soit sur une propriété du ViewModel qui renvoie l'élément à afficher :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ContentControl Content="{Binding SelectedItem}">


    EDIT: j'avais pas vu, dans tes DataTemplate il manque le TargetType :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ContentControl Content="{Binding BC}">
        <ContentControl.Resources>
            <DataTemplate TargetType="{x:Type vm:ViewModelB}">
                <v:ViewB />
            </DataTemplate>
            <DataTemplate TargetType="{x:Type vm:ViewModelC}">>
                <v:ViewC />
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Arf, ta dernière solution semblait parfaite, mais je n'ai pas de propriété TargetType pour mes DataTemplate... Peut-être absente en Silverlight ?

    Edit : bon finalement, il se lance mais la syntaxe ne doit pas être tout à fait bonne car il génère une Exception.

    Edit2 :

    J'ai également essayé avec cette syntaxe :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <ContentControl Content="{Binding BC}">
        <ContentControl.Resources>
            <DataTemplate TargetType="vm:ViewModelB">
                <v:ViewB />
            </DataTemplate>
            <DataTemplate TargetType="vm:ViewModelC">>
                <v:ViewC />
            </DataTemplate>
        </ContentControl.Resources>
    </ContentControl>

    Mais là encore, la génération ne pose pas de problème mais une Exception est générée à l'exécution :
    Attribut TargetType inconnu dans l'élément DataTemplate.
    Edit3 : msdn propose l'utilisation de DataType à la place de TargetType :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <DataTemplate DataType="{x:Type vm:ViewModelB}">
        <v:ViewB />
    </DataTemplate>

    Mais, là encore, ça crash à l'exécution...

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ah oui pardon, c'est DataType, pas TargetType...
    ça plante comment ? quelle erreur ?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Erreur à l'exécution (lors de l'initialisation des composants) :
    Valeur d'attribut {x:Type vm:ViewModelB} non valide pour la propriété DataType
    Mais c'est également bizarre car DataType n'est pas proposé par l'auto-completion et le designer ne s'affiche pas.

    J'ai trouvé ça sur msdn, mais je ne suis pas sûr que ça concerne ce que j'essaye de faire :

    If you are binding a ContentControl to a collection of Task objects, the ContentControl does not use the above DataTemplate automatically. This is because the binding on a ContentControl needs more information to distinguish whether you want to bind to an entire collection or the individual objects. If your ContentControl is tracking the selection of an ItemsControl type, you can set the Path property of the ContentControl binding to "/" to indicate that you are interested in the current item. For an example, see How to: Bind to a Collection and Display Information Based on Selection. Otherwise, you need to specify the DataTemplate explicitly by setting the ContentTemplate property.
    lien : http://msdn.microsoft.com/en-us/library/ms742521.aspx

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu as bien déclaré le namespace XML "vm" ? un truc comme ça :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:vm="clr-namespace:MonProjet.ViewModel"

    Citation Envoyé par Stunt_las Voir le message
    J'ai trouvé ça sur msdn, mais je ne suis pas sûr que ça concerne ce que j'essaye de faire :

    "If you are binding a ContentControl to a collection of Task objects, the ContentControl does not use the above DataTemplate automatically. This is because the binding on a ContentControl needs more information to distinguish whether you want to bind to an entire collection or the individual objects. If your ContentControl is tracking the selection of an ItemsControl type, you can set the Path property of the ContentControl binding to "/" to indicate that you are interested in the current item. For an example, see How to: Bind to a Collection and Display Information Based on Selection. Otherwise, you need to specify the DataTemplate explicitly by setting the ContentTemplate property."

    lien : http://msdn.microsoft.com/en-us/library/ms742521.aspx
    Oui mais c'est pas une collection que tu veux afficher, si ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Tu as bien déclaré le namespace XML "vm" ? un truc comme ça :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:vm="clr-namespace:MonProjet.ViewModel"
    Oui


    Citation Envoyé par tomlev Voir le message
    Oui mais c'est pas une collection que tu veux afficher, si ?
    Ce que j'affiche dans ma ViewB ou ViewC est une collection exposée par ViewModelB et ViewModelC. Mais effectivement, après relecture, ce paragraphe concerne le cas où on voudrait afficher une collection de ViewB par exemple.

    Edit : Bon, après test, l'auto-completion me propose DataType dans un projet classique, mais pas dans le projet Silverlight... Dommage...

    Edit2 : j'essaye cette solution : http://www.simonferquel.net/blog/arc...eselector.aspx

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Stunt_las Voir le message
    Edit : Bon, après test, l'auto-completion me propose DataType dans un projet classique, mais pas dans le projet Silverlight... Dommage...
    Argh... j'avais oublié que t'étais en Silverlight
    Et effectivement le DataTemplate n'a pas de propriété DataType en SL.

    Je découvre tous les jours de nouvelles limitations dans SL, ça me donne vraiment pas envie de m'y mettre

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Eh oui ^^. Mais bon, c'est encore relativement récent comme techno, ça va bien mûrir. Enfin espérons...

    J'ai trouvé ça qui semble pouvoir faire ce que tu proposais : http://tozon.info/blog/post/2009/04/...revisited.aspx

    Mais ça me semble trop simple, on dirait qu'il a seulement hérité de la classe DataTemplate et ajouté une propriété DataType...

    Mais si tu as d'autres idées, n'hésite pas

    Merci.




    Edit :

    J'y suis presque ! En utilisant la classe FormFieldTemplateSelector proposée dans le lien ci-dessus, le type de View dépend du type de ViewModel bindé au FormFieldTemplateSelector lors du chargement. Je voudrais maintenant que cela soit fait à chaque fois que le ViewModel bindé change.

    la classe FormFieldTemplateSelector se présente ainsi :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    public class FormFieldTemplateSelector : UserControl
        {
            public Collection<TemplateSelectorDataTemplate> DataTemplates { get; set; }
     
            public static readonly DependencyProperty DataTypeProperty = DependencyProperty.Register("DataType", typeof(string), typeof(FormFieldTemplateSelector), new PropertyMetadata(string.Empty));
            public string DataType
            {
                get { return (string)GetValue(DataTypeProperty); }
                set { SetValue(DataTypeProperty, value); }
            }
     
            public FormFieldTemplateSelector()
            {
                DataTemplates = new Collection<TemplateSelectorDataTemplate>();
                Loaded += new RoutedEventHandler(OnLoaded);
            }
     
            private void OnLoaded(object sender, RoutedEventArgs e)
            {
                string fieldType = DataType;
     
                for (int i = 0; i < DataTemplates.Count; i++)
                {
                    if (fieldType == DataTemplates[i].DataType)
                    {
                        Content = DataTemplates[i].LoadContent() as UIElement;
                        return;
                    }
                }
                Content = null;
            }
        }

    Et dans le XAML :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <d:FormFieldTemplateSelector DataType="{Binding Path=SelectedViewModel, Mode=TwoWay}">
        <d:FormFieldTemplateSelector.DataTemplates>
            <d:TemplateSelectorDataTemplate DataType="ViewModelB">
                <v:ViewB/>
            </d:TemplateSelectorDataTemplate>
            <d:TemplateSelectorDataTemplate DataType="ViewModelC">
                <v:ViewC/>
            </d:TemplateSelectorDataTemplate>
        </d:FormFieldTemplateSelector.DataTemplates>
    </d:FormFieldTemplateSelector>

    J'ai donc un binding TwoWay vers ma propriété SelectedViewModel qui génère des PropertyChangedEvent lorsqu'elle est modifiée.

    Seulement voilà, le setter de la propriété DataType de la classe FormFieldTemplateSelector n'est pas appelée lorsque la propriété vers laquelle elle est bindée est modifiée.

    Des suggestions ?

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Stunt_las Voir le message
    Seulement voilà, le setter de la propriété DataType de la classe FormFieldTemplateSelector n'est pas appelée lorsque la propriété vers laquelle elle est bindée est modifiée.
    C'est normal : la propriété DataType avec getter et setter n'est là que par commodité, pour que ce soit plus facile à utiliser, mais le binding (et par extension tout le système des dependency properties) ne l'utilise pas : il utiliser directement DependencyObject.SetValue

    Si tu veux pouvoir réagir au changement de valeur d'une dependency property, il faut définir un callback :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static readonly DependencyProperty DataTypeProperty =
        DependencyProperty.Register(
            "DataType",
            typeof(string),
            typeof(FormFieldTemplateSelector),
            new PropertyMetadata(
                string.Empty,
                DataTypeChanged));
     
    private static void DataTypeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        // Traite le changement de valeur
    }

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut
    Décidemment, le sort s'acharne... Je voudrais en fait exécuter le même code que pour la méthode OnLoaded, mais je ne peux ni faire appel à celle-ci, ni à la propriété DataType car elle ne sont pas statiques.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 14
    Dernier message: 09/09/2011, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo