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 :

Construire un DataTemplate de dataform dans le code behind


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut Construire un DataTemplate de dataform dans le code behind
    Bonjour à tous

    J'ai un dataform construit dans du XAML qui contient un datatemplate avec une textbox. Ca fonctionne très bien. En code simplifié, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <dataform:DataForm>
      <dataform:DataForm.EditTemplate>
        <DataTemplate>
          <dataform:DataField>
            <TextBox Text="{Binding myField, Mode=TwoWay}"/>
          </dataform:DataField>
        </DataTemplate>
      </dataform:DataForm.EditTemplate>
    </dataform:DataForm>
    Seulement j'ai besoin de transcrire ce code en code-behind C# pur, et j'ai du mal avec le DataTemplate. Sur le net, ils parlent de faire un user control séparé en XAML avec le DataTemplate, mais je trouve bizarre qu'on ne puisse pas tout faire en C#.

    Voici où j'en suis, c'est pas terrible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TextBox textBox = new TextBox();
    Binding binding = new Binding("myField");
    binding.Mode = BindingMode.TwoWay;
    textBox.SetBinding(TextBox.TextProperty, binding);
    DataTemplate dataTemplate = new DataTemplate();
    // DataTemplate doesn't support anything like dataTemplate.Controls.Add()
    Merci d'avance du coup de main

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Un DataTemplate c'est pas fait pour être créer par code.

    La seule solution est d'utiliser un XamlReader.Load mais c'est quand même pas fait pour.

  3. #3
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Tu as raison. D'ailleurs, je viens juste de tomber sur ça :

    According to MSDN: "The XAML usage that defines the content for creating a data template is not exposed as a settable property. It is special behavior built into the XAML processing of a DataTemplate object element."
    Perso, je ne suis pas expert mais je ne comprends pas le pourquoi de cette restriction. J'ai besoin de créer dynamiquement des DataForm avec des DataTemplate dedans, je le fais donc en code behind

    En tout cas, merci pour ta réponse, et ta participation au forum

  4. #4
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ensuite la question vient : pourquoi tu veux créer un DataTemplate en code ? Tu veux réaliser quoi exactement ?

  5. #5
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Oui, on part souvent sur des mauvaises solutions car mauvais design...

    Mon but, c'est de modifier des tables SQL depuis un dataform. Hors, mes tables SQL contiennent :
    - des champs classiques => textboxes ou checkboxes dans l'IHM
    - des foreign keys => comboboxes dans l'IHM affichant les libellés des primary tables

    Je n'utilise pas l'AutoGenerateField, mais l'EditTemplate + DataTemplate, pour pouvoir afficher les champs que je veux.

    Je peux faire tout ça en XAML, seulement j'ai 500000 tables SQL à mettre dans des IHM, donc je fais une méthode C# générique qui parcourt les champs dans le Domain Service et construit dynamiquement le dataform.

    Voili voilou. De meilleures solutions ?

  6. #6
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Bon, j'ai pu avancer avec le XamlReader !
    Mais là, je suis bloqué, et je ne trouve pas la solution sur le net... Mon code ci-dessous ne reconnaît pas <DataField> :
    Elément inconnu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    StringBuilder editTemplate = new StringBuilder();
    editTemplate.Append("<DataTemplate ");
    editTemplate.Append("xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' ");
    editTemplate.Append("xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>");
    editTemplate.Append("<StackPanel>");
    editTemplate.Append("<DataField>");
    editTemplate.Append("<TextBox Text='{Binding rcr_label, Mode=TwoWay}'/>");
    editTemplate.Append("</DataField>");
    editTemplate.Append("</StackPanel>");
    editTemplate.Append("</DataTemplate>");
    dataForm.EditTemplate = XamlReader.Load(editTemplate.ToString()) as DataTemplate;
    Quand je codais le code ci-dessus en XAML, il fallait effectivement écrire <dataform: DataField>, et non <DataField>, avec dataform valant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:dataform="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"
    Mais en mettant <dataform: DataField> dans le code behind, ça ne fonctionne pas non plus, ni <system.Windows.Controls: DataField>

    Merci si vous pouvez m'aider

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [.net]Appeler une fonction située dans le code behind
    Par anto dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 20/05/2009, 13h05
  2. Réponses: 2
    Dernier message: 05/04/2007, 14h53
  3. Réponses: 2
    Dernier message: 30/03/2007, 22h14
  4. Réponses: 1
    Dernier message: 20/01/2007, 11h47
  5. Réponses: 6
    Dernier message: 09/01/2007, 14h12

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