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 :

Interdire le changement de valeur d'une combo


Sujet :

Windows Presentation Foundation

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut Interdire le changement de valeur d'une combo
    Bonjour

    voici mon code
    fenetre
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
      public partial class MainWindow : Window, INotifyPropertyChanged
        {
            public MainWindow()
            {
                InitializeComponent();
            }
     
            #region List
            ObservableCollection<string> _list = null;
            public ObservableCollection<string> List
            {
                get
                {
                    if (_list == null)
                    {
                        _list = new ObservableCollection<string>();
                        _list.Add("alpha");
                        _list.Add("beta");
                        _list.Add("gamma");
                    }
                    return _list;
                }
            }
            #endregion
     
            #region SelectedItem
            private object _SelectedItem = null;
            public object SelectedItem
            {
                get { return _SelectedItem; }
                set
                {
                    if (value != null && _SelectedItem != null)
                    {
     
                        if (MessageBox.Show("Autoriser le changement",
                            "",
                            MessageBoxButton.YesNo,
                            MessageBoxImage.Question,
                            MessageBoxResult.No) == MessageBoxResult.No)
                        {
                            Application.Current.Dispatcher.BeginInvoke((Action)(() =>
                            {
                                object o = cb.SelectedItem;
                                cb.SelectedItem = null;
                                cb.SelectedItem = o;
                            }), System.Windows.Threading.DispatcherPriority.Background);
                            //if (PropertyChanged != null)
                            //    PropertyChanged(this, new PropertyChangedEventArgs("CurrentItem"));
                            return;
                        }
                    }
                    _SelectedItem = value;
                    if (PropertyChanged != null)
                        PropertyChanged(this, new PropertyChangedEventArgs("SelectedItem"));
                }
            }
            #endregion
     
            public event PropertyChangedEventHandler PropertyChanged;
        }
    et xaml
    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
    <Window x:Class="TestCombo_Chan_ge_Value.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow"
            x:Name="win"
            Height="350"
            Width="525">
        <Grid>
            <ComboBox 
                x:Name="cb"
                ItemsSource="{Binding List, ElementName=win}"
                SelectedItem="{Binding SelectedItem, Mode=TwoWay, ElementName=win}"
                HorizontalAlignment="Left"
                      Margin="26,32,0,0"
                      VerticalAlignment="Top"
                      Width="190" />
        </Grid>
    </Window>
    ce que je voudrais faire c'est demander a l'utilisateur si on peut changer la valeur de la combo quand on passe par exemple d'"alpha" a "beta"
    la solution que j'ai trouve est de mettre "Application.Current.Dispatcher.BeginInvoke" pour decaler la mise a jour
    en passant par un null puis la mise a jour a la valeur reel
    car je suppose que la combo met a jour dans un premier temps la propriete avant de positionner sa valeur interne
    sauf qu'avace cette methode ca flash un peut puisqu'on passe vraiment a la valeur "beta" avant de revoir "alpha"

    j'aimerais savoir si vous auriez pas une solution plus sexy
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  2. #2
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Salut,

    Sans aucun doute je suis fatigué mais j'ai rien pigé de ce que tu souhaites faire

    Petite remarque : l'implementation de l'interface INotifyPropertyChanged ne doit pas se faire dans un setter .

    Généralement on passe par la combine du Application.Current.Dispatcher.BeginInvoke pour manipuler le thread graphique pendant un autre processus .

    Si tu peux essayer de reformuler s'il te plait
    throw new NoSignatureException();

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    voila l'objectif est de demander a l'utilisateur s'il veut vraiment changer de valeur sur une combo

    tu as une combo avec "alpha" "beta" "gamma" dedans
    par exemple si la combo est en sélection sur "alpha"
    si l'utilisateur dans la combo choisi "beta"
    alors on lui demandera si il veut vraiment changer
    si oui on change
    sinon on reste sur la valeur "alpha"

    j'ai tenté pleins de truc
    - comme une dp en faisant du code dans le coerce,
    - dupliquer les membres pour les connecter en interne

    j'ai même réussi a faire la chose suivante c'est a dire avoir "beta" a l'ecran et dans le selecteditem de la combo "alpha" bref des choses etonnantes

    j'ai effectivement réussi a découpler (a rendre l'interdiction effective - regarde le code plus haut qui marche-) avec un dispatcher seulement on voit la combo passer sur "beta" pour revenir a "alpha" ce qui est pas top visuellement ....
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

Discussions similaires

  1. Problème avec le changement de valeur d'une combo
    Par justgreat dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/06/2010, 12h05
  2. changement de valeur d'une colonne JTable
    Par matzeus dans le forum Composants
    Réponses: 1
    Dernier message: 04/05/2006, 18h05
  3. [glade] Récupération d'une valeur dans une combo
    Par Poutchjay dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 23/01/2006, 14h59
  4. Réponses: 1
    Dernier message: 29/09/2005, 11h10
  5. Intercepter le changement de valeur d'une variable
    Par Captain_JS dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/01/2005, 08h04

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