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

Windows Presentation Foundation Discussion :

Binding sur textbox dans usercontrol


Sujet :

Windows Presentation Foundation

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Binding sur textbox dans usercontrol
    Bonjour à tous,

    Je ne poste pas souvent, mais la je suis sec.
    Tout d'abord, merci à ceux qui lieront mon message et passeront du temps à tenter de m'aider!
    Je vais donc tenter de vous expliquer mon problème.

    J'ai une grid, dans laquelle j'ai une ListBox qui utilise un datatemplate dans lequel un usercontrol perso.
    Mon usercontrol est bindé sur le datacontext de la grid.
    Mon datacontext contient une observablecollection dans laquel j'ai des objets Piece
    Ma class Piece est interfacé avec INotifyPropertyChanged

    Classe pièce :
    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
    28
    29
    30
        public class Piece : INotifyPropertyChanged
        {
            private string m_sNom;
            public string Nom
            {
                get
                {
                    // Return
                    return m_sNom;
                }
                set
                {
                    // Set
                    m_sNom = value;
                    FirePropertiyChanged("Nom");
                }
            }
            public Piece(string p_sNom)
            {
                m_sNom = p_sNom;
            }
            public event PropertyChangedEventHandler PropertyChanged;
            public void FirePropertiyChanged(string propertyName)
            {
                // Si la propriété à changé
                if (PropertyChanged != null)
                    // Mettre à jour la propriété
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    Ma page xaml
    Code xaml : 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
    <UserControl x:Class="Bolt.UsrControl.ucAssembly"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 xmlns:ESLWPF="clr-namespace:ESL;assembly=ESL"
                 d:DesignHeight="300" d:DesignWidth="300">
        <UserControl.Resources>
            <DataTemplate x:Key="PieceTemplate">
                <Border HorizontalAlignment="Stretch" BorderBrush="Blue" BorderThickness="1" CornerRadius="2" Width="auto">
                    <Grid HorizontalAlignment="Stretch" DataContext="{Binding}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <ESLWPF:ESLWPFTextBox Grid.Column="0" Text="{Binding Nom}" Margin="3" NulAutorise="False" />
                    </Grid>
                </Border>
            </DataTemplate>
        </UserControl.Resources>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <ListBox Name="m_lbxPiece" Grid.Row="0" ItemTemplate="{DynamicResource PieceTemplate}" ItemsSource="{Binding}" HorizontalContentAlignment="Stretch" Grid.ColumnSpan="2">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>
        </Grid>
    </UserControl>

    Le xaml de mon usercontrol
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <UserControl x:Class="ESL.ESLWPFTextBox"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid x:Name="LayoutRoot">
            <TextBox Name="m_txt" Text="{Binding Text, Mode=TwoWay}" />
        </Grid>
    </UserControl>

    Le code de mon 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
    24
    25
        public partial class ESLWPFTextBox : UserControl
        {
            public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(ESLWPFTextBox));
            public string Text
            {
                get
                {
                    // Return
                    return (string)GetValue(TextProperty);
                }
                set
                {
                    // Set
                    SetValue(TextProperty, value);
                }
            }
            public ESLWPFTextBox()
            {
                    // Initialiser le composant
                    InitializeComponent();
     
                    // Mettre à jour le DataContext
                    LayoutRoot.DataContext = this;
            }
        }
    Mon problème : J'arrive bien à afficher les données dans mon controls dans ma listebox, mais lorsque je tente de modifier ces données, elles ne sont pas mise à jour dans mon observablecollection.

    J'espère avoir était assez clair !

    Merci pour votre aide

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bon bien après 2 jours de recherche, j'ai trouvé mon erreur !

    Il manquait le dans le binding de l'utilisation de mon usercontrol dans mon application.

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

Discussions similaires

  1. Double click sur textbox dans custom server contro
    Par cbleas dans le forum ASP.NET
    Réponses: 3
    Dernier message: 18/01/2011, 08h40
  2. focus sur TextBox dans UserForm
    Par Touffe54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2010, 22h58
  3. Binding sur "Items" dans le GroupStyle qui ne se met pas à jour si plusieurs items
    Par strat0 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 11/05/2009, 10h47
  4. [ASPX C#] pb click sur boutton dans usercontrol
    Par Netah dans le forum ASP.NET
    Réponses: 7
    Dernier message: 03/04/2008, 09h08
  5. [VBA-E] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/11/2006, 11h39

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