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 :

Vider textbox après mise à jour


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Points : 70
    Points
    70
    Par défaut Vider textbox après mise à jour
    Bonjour,

    J'ai un textbox binder sur une entité appelé TypeEvenement (j'utilise entity framework) , une listbox binder avec un observableCollection de type TypeEvenement et un bouton "Ajouter".

    Quand on clique sur Ajouter, le contenu du textbox est ajouter à la listbox.
    Tout ceci fonctionne bien, par contre je voudrais réinitialiser le textbox a chaque ajout. C'est à dire vider le contenu du textbox.

    Je pensais faire un textbox.text = "" mais je trouve sa moche.

    Voici le code le constructeur de la fenetre avec l'initialisation des variables

    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
    public EvenementViewModel(IDataAccessService dataService)
            {
                _dataService = dataService;
     
                _listTypeEvenement = new ObservableCollection<TypeEvenement>();
     
                foreach (TypeEvenement typEvent in _dataService.GetTypeEvenement().ToList<TypeEvenement>())
                    _listTypeEvenement.Add(typEvent);
     
                _collectionView = CollectionViewSource.GetDefaultView(_listTypeEvenement);
     
                if (_collectionView == null)
                    throw new ArgumentNullException("collectionView");
     
                _collectionView.CurrentChanged += new System.EventHandler(_collectionView_CurrentChanged);
     
                if (_typeEvenement == null)
                    _typeEvenement = new TypeEvenement();
            }
    L'observable collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public ObservableCollection<TypeEvenement> ListeTypeEvenement
            {
                get { return _listTypeEvenement; }
            }

    La création des type d'evenement :

    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
    public ICommand CreateTypeEvent
            {
                get
                {
                    if (_createCommand == null)
                        _createCommand = new RelayCommand(param => CreateEvent());
     
                    return _createCommand;
                }
            }
     
            private void CreateEvent()
            {
                _listTypeEvenement.Add(_dataService.InsertTypeEvenement(_typeEvenement));
            }
    Et la propriété TypeEvent lié au textbox :

    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
     public TypeEvenement TypeEvent
            {
                get
                {
                    return _typeEvenement;
                }
                set
                {
                    if (value != _typeEvenement)
                    {
                        _typeEvenement = value;
                        OnPropertyChanged("TypeEvent");
                    }
                }
            }
    Et la parti XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <TextBox Height="23" HorizontalAlignment="Left" Margin="13,86,0,0" Name="txtTypeEvenement"  Text="{Binding Path=TypeEvent.libelle, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" VerticalAlignment="Top" Width="192" />
            <Label Content="Type événement" Height="28" HorizontalAlignment="Left" Margin="13,43,0,0" Name="label1" VerticalAlignment="Top" Width="100" />
            <Button Content="Créer" Height="23" HorizontalAlignment="Left" Margin="144,143,0,0" Name="button1" VerticalAlignment="Top" Width="107" Command="{Binding Path=CreateTypeEvent}" />
            <ListBox Height="173" HorizontalAlignment="Left" Margin="265,23,0,0" Name="lstTypeEvenement" VerticalAlignment="Top" Width="181" ItemsSource="{Binding ListeTypeEvenement}" IsSynchronizedWithCurrentItem="True">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Path=libelle}"></TextBlock>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    Comment faire pour gérer cela ?

    Merci de votre aide

  2. #2
    Nouveau membre du Club Avatar de Léonard Labat
    Homme Profil pro
    Consultant .NET
    Inscrit en
    Juillet 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .NET
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 17
    Points : 33
    Points
    33
    Par défaut
    Peut être pourrais tu faire un wrapper autour de la propriété de type texte de ton objet TypeEvent qui est bindée à ta TextBox.

    Du genre :
    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
     
    public string TypeEventWrapper
            {
                get
                {
                    return _typeEvenement.libelle;
                }
                set
                {
                    if (value != _typeEvenement.libelle)
                    {
                        _typeEvenement.libelle= value;
                        OnPropertyChanged("TypeEventWrapper");
                    }
                }
            }
    Tu changes le binding de la textbox pour le faire pointer vers TypeEventWrapper, et à l'ajout d'un type d'évènement, tu fais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeEventWrapper = string.Empty;

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Points : 70
    Points
    70
    Par défaut
    Ok sa marche nikel ! Merci

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 256
    Points : 70
    Points
    70
    Par défaut
    Petit problème, j'implémentais l'interface IDataErrorInfo avant de passer par le wrapper et mes contrôles de règles fonctionnait bien, et maintenant plus rien ne fonctionne.

    Ce qui est normal car ma classe TypeEvenement implémentait IDataErrorInfo mais pas le wrapper (ici TypeEventWrapper).

    Comment faire pour gérer cela ?

    Merci

Discussions similaires

  1. Lancement d'une macro après mise à jour d'une cellule
    Par Mukade dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/10/2007, 11h52
  2. Plus d'internet après mise à jour
    Par Le Furet dans le forum Windows Vista
    Réponses: 1
    Dernier message: 02/10/2007, 14h30
  3. Réponses: 1
    Dernier message: 27/06/2007, 10h31
  4. Mon programme ne fonctionne plus après mise à jour de linux
    Par dybmans dans le forum GTK+ avec C & C++
    Réponses: 22
    Dernier message: 06/05/2007, 18h08
  5. Réponses: 5
    Dernier message: 13/07/2006, 09h39

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