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

C# Discussion :

UserControl créé dynamiquement et Model


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut UserControl créé dynamiquement et Model
    Bonjour,

    Je développe une IHM avec les WPF en MVVM, et je rencontre un problème, je vous explique:
    j'ai une fenêtre principale avec des tabitems créés dynamiquement suivant le nombre de fichiers XML que j'ai dans le répertoire courant de l'exécutable.
    Chaque fichier XML contient des paramètres donc j'ai créé un Model Parameter. et aussi un userControl qui doit afficher quelques propriétés du paramètre et qui est créé dynamiquement suivant le nombre de paramètre contenu dans le fichier. Jusque là j'ai réussi à binder chaque paramètre avec son userControl.

    Chaque userControl étant constitué de textbox dont un pour que l'utilisateur entre une valeur et de 2 boutons un pour valider la valeur entrée par l'utilisateur et l'autre pour supprimer.
    Le problème c'est que lorsque je clique sur le bouton valider du userControl correspondant au paramètre je ne retrouve pas les propriètés correspondants à ce paramètres mais toujours les propriétés du dernier paramètre affiché à l'IHM et je voudrais qu'à chaque fois que je clique sur le bouton valider qu'il me renvoie les propriétés du paramètre bindé pour que je puisse y ajouter la valeur entrée par l'utilisateur à la propriété correspondante.

    Merci de votre compréhension si quelqu'un pouvait bien m'aider,

  2. #2
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Il nous faudrait un peu de code pour être sûr mais je vois 2 solutions :
    - quick-and-dirty : utilise la propriété Tag pour stocker l'objet Parameter correspondant
    - MVVM : utilise une ICommand et passe comme CommandParameter l'objet Parameter
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci de m'avoir répondu, pour le code voici comment je crée mes userControls suivant chaque paramètre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    for (int j = 0; j < parameterInfos.Count; j++)
    {
                                App.AppliViewModel.NewParameter();
                                App.AppliViewModel.Parameter.Formula = formulaofParameter;
                                App.AppliViewModel.Parameter.NameParam = nameofParameter;
                                App.AppliViewModel.Parameter.DefaultValue = DefautValue;
                                App.AppliViewModel.Parameter.MaxValue = MaxValue;
                                App.AppliViewModel.Parameter.MinValue = MinValue;
                                App.AppliViewModel.Parameter.IndexParameter = j.ToString();
                                App.AppliViewModel.Parameter.CatalogParameter = nameofCatalog;
                                App.AppliViewModel.ParametersList.Add(App.AppliViewModel.Parameter);
                                ElementParam elementIhmParam = new ElementParam();
                                elementIhmParam.DataContext = App.AppliViewModel.Parameter;
                                myWrapPanel.Children.Add(elementIhmParam);
                            }
    La classe Parameter étant mon model pour le paramètre

    là le code xaml pour le binding dans le userControl:

    Code : 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
    <UserControl x:Class="Views.ElementParam"
                 Name="ElementsParam" 
                 mc:Ignorable="d" d:DesignHeight="50" d:DesignWidth="440" DataContext="{Binding Parameter}">
     
        <Grid Height="51" Width="438">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="442*" />
                <ColumnDefinition Width="115*" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="48*" />
            </Grid.RowDefinitions>
            <Label Content="{Binding Path=NameParam, Mode = TwoWay}"  Style="{StaticResource myLabelStyle}" FontWeight="bold" Height="28" HorizontalAlignment="Right" Margin="0,17,241,0" Name="ParameterName" VerticalAlignment="Top" Width="102" ToolTip="Parameter Name" Padding="20" BorderBrush="Black" AllowDrop="False" />
            <TextBox Text="{Binding Path=EnteredValue, Mode = TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="23"  HorizontalAlignment="Right" Margin="0,14,170,0" Name="ParameterEntryValue" VerticalAlignment="Top" Width="62" ToolTip="Enter a value" Padding="1" TextChanged="ParameterEntryValue_TextChanged" Background="MintCream" PreviewTextInput="ParameterEntryValue_PreviewTextInput" />
            <TextBox Text="{Binding Path=MinValue, Mode = TwoWay}" FontWeight="Normal" Height="23" HorizontalAlignment="Right" Margin="0,14,27,0" Name="ParameterMinValue" VerticalAlignment="Top" Width="50" IsReadOnly="True" IsEnabled="True" Background="LightSteelBlue" ToolTip="Minimum value" Padding="1" />
            <TextBox Text="{Binding Path=DefaultValue, Mode = TwoWay}" FontWeight="Normal" Height="23" HorizontalAlignment="Right" Margin="0,14,62,0" Name="ParameterDefaultValue" VerticalAlignment="Top" Width="50" Grid.ColumnSpan="2" IsReadOnly="True" IsEnabled="True" Background="Silver" ToolTip="Default value" Padding="1" />
            <TextBox Text="{Binding Path=MaxValue, Mode = TwoWay}" FontWeight="Normal" Height="23" HorizontalAlignment="Right" Margin="0,14,7,0" Name="ParameterMaxValue" VerticalAlignment="Top" Width="50" Grid.Column="1" IsReadOnly="True" IsEnabled="True" Background="SlateGray" ToolTip="Maximum value" Padding="1" />
            <Button Height="23" HorizontalAlignment="Left" Margin="192,14,0,0" Name="ValidateEntry" VerticalAlignment="Top" Width="30" Uid="" ToolTip="Validate your entered value" Click="ValidateEntry_Click" Padding="1" IsEnabled="False" Focusable="True" IsHitTestVisible="True" IsTabStop="False" IsManipulationEnabled="False" IsDefault="True">        
            </Button>
            <Button Height="23" HorizontalAlignment="Left" Margin="229,14,0,0" Name="CancelEntry" VerticalAlignment="Top" Width="30" ToolTip="Cancel your entered value" Click="CancelEntry_Click" Padding="1" IsEnabled="False" Focusable="True" IsHitTestVisible="True" IsTabStop="False" Opacity="1">
            </Button>
        </Grid>
    </UserControl>
    et le code lorsque l'on appui sur le bouton valider:

    Code : 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
    private void ValidateEntry_Click(object sender, RoutedEventArgs e)
            {
                string txt = ParameterEntryValue.Text;
                txt = txt.Replace(" ", ""); //efface tous les blancs du text
                int dataentry = 0;
                    dataentry = Convert.ToInt32(ParameterEntryValue.Text);
                    int minValue = Convert.ToInt32(ParameterMinValue.Text);
                    int maxValue = Convert.ToInt32(ParameterMaxValue.Text);
                    int defaultValue = 0;
                    if (ParameterDefaultValue.Text != "")
                    {
                        defaultValue = Convert.ToInt16(ParameterDefaultValue.Text);
                    }
                    if (dataentry < minValue || dataentry > maxValue)
                    {
                        MessageBox.Show("Please enter a value into the boundaries values", "Entered Value", MessageBoxButton.OK, MessageBoxImage.Information);
                        ParameterEntryValue.Background = Brushes.Red;
                    }
                    else if (dataentry == defaultValue)
                    {
                        MessageBox.Show("Please enter a value different of the default value", "Entered Value", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                    else
                    {
                        App.AppliViewModel.addModifiedParameterInList(ParameterEntryValue.Text);
                    }
                }
    et c'est dans la méthode "addModifiedParameterInList(string text)" que je voudrais avoir le bon paramètre lorsque l'on clique sur le bouton Valider et là je ne le récupère pas,

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    je vais voir avec le ICOMMAND si ça donne quelque chose

  5. #5
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Ben du coup tu ne pourrais pas tout simplement faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    App.AppliViewModel.addModifiedParameterInList(ParameterEntryValue.Text, DataContext as Parameter);
    pour transférer l'objet paramètre à la méthode ?...
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    eh ben dis donc j'aurai du vous poser ma question depuis vendredi,
    merci beaucoup en rajoutant juste le DataContext as Parameter dans la méthode comme vous me l'avez suggéré je récupère le bon paramètre,

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

Discussions similaires

  1. Contrôles désactivés dans UserControl ajouté dynamiquement
    Par David_ducargie dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/05/2012, 11h58
  2. positionner des usercontrol chargés dynamiquement
    Par sanouk dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 19/12/2008, 23h35
  3. Réponses: 4
    Dernier message: 19/05/2008, 10h30
  4. [c#]usercontrol chargé dynamiquement
    Par jp_75000 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/06/2006, 15h10
  5. Réponses: 1
    Dernier message: 16/06/2006, 16h44

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