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 :

isEnabled ne fonctionne que dans un sens


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 698
    Points : 586
    Points
    586
    Par défaut isEnabled ne fonctionne que dans un sens
    Bonjour,

    j'ai un listeView avec un item template qui contient un combobox et un stackpanel avec d'autre champs.
    J'aissai de griser le stack panel en fonction de la combo.

    Mon problème est que ça fonctionne dans un sense mais pas dans l'autre.
    Je peux passer de active à grisé (isEnabled = faux) tout va bien.
    Quand je veux réactivé le champ, en débug le code est exécuté, mais le champ reste inactif.


    Voilà le code de l’événement de changement dans la combo.
    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
     
            private void cbInputColumn_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                ComboBox oCbInput = sender as ComboBox;
                if (e.AddedItems[0].ToString()== "<Ignore>")
                {
                    foreach(object oCtrl in (oCbInput.Parent as StackPanel).Children)
                    {
                        if((oCtrl is StackPanel))
                        {
                            (oCtrl as StackPanel).IsEnabled = false;
                        }
                    }
                }
                else
                {
                    foreach (object oCtrl in (oCbInput.Parent as StackPanel).Children)
                    {
                        if ((oCtrl is StackPanel))
                        {
                            (oCtrl as StackPanel).IsEnabled = true;
                        }
                    }
                }
            }

  2. #2
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Juin 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Juin 2015
    Messages : 87
    Points : 61
    Points
    61
    Par défaut
    Bonjour

    Tu peux faire cela avec un trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     <StackPanel.Style>
                                        <Style TargetType="{x:Type StackPanel}">
                                            <Setter Property="IsEnabled" Value="True"  />
                                            <Style.Triggers>
                                                <DataTrigger Binding="{Binding SelectedItemdetacombobox }" Value="Tavalue">
                                                    <Setter Property="IsEnabled" Value="False"  />
                                                </DataTrigger>
     <DataTrigger Binding="{Binding SelectedItemdetacombobox}" Value="AutreValeur">
                                                    <Setter Property="IsEnabled" Value="True"  />
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </StackPanel.Style>
    Ou SelectedItemdetacombobox est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <ComboBox ItemsSource="{Binding XXX}" SelectedItem="{Binding SelectedItemdetacombobox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  />
    Tu peux multiplier les triggers après je ne sais pas comment tu reactive ton stackpanel suivant une autre value de ta combobox, ou avec un checkbox, avec un bouton ?

    Sinon dans ta classe tu peux mettre un bool blinder sur ton IsEnabled de ton stackpanel qui changera avec ton SelectedItem de ta listview :

    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
    17
    18
     
     <ListView  Background="{x:Null}" IsSynchronizedWithCurrentItem="True" BorderThickness="0" ItemsSource="{Binding ListBoucheSdB, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedBoucheVMC, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
     
                                <ListView.View>
                                    <GridView ColumnHeaderContainerStyle="{StaticResource MasqueHeader}">
                                        <GridViewColumn  Width="180">
                                            <GridViewColumn.CellTemplate>
                                                <DataTemplate>
     
     
                                                    <TextBlock Width="165" HorizontalAlignment="Left" TextAlignment="Left" Text="{Binding Piece}" Visibility="{Binding VisibilityPiece, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
     
                                                </DataTemplate>
                                            </GridViewColumn.CellTemplate>
                                        </GridViewColumn>
                    </GridView>
                                </ListView.View>
                            </ListView>
    ma class :
    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
     
     [Serializable]
        [XmlRoot]
        public class BoucheVMC : Inpc, INotifyPropertyChanged
        {
     
            public string Piece { get; set; }
            [XmlAttribute]
     
     
            private Visibility _VisibilityPiece;
            [XmlIgnore]
            public Visibility VisibilityPiece
            {
                get => _VisibilityPiece;
                set { _VisibilityPiece = value; OnPropertyChanged(); }
            }
     
        }
    mon viewModel :

    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
     
     public VmcViewModel()
     
            {
     ListBoucheSdB = new ObservableCollection<BoucheVMC>(BoucheProvider.GetAll().Select(x => x));
    foreach (var item in ListBoucheSdB)
                            {
                                SelectedBoucheSdB = item;
                                if (ListBoucheSdB.IndexOf(SelectedBoucheSdB) != 0)
                                {
                                    SelectedBoucheSdB.VisibilityPiece = Visibility.Collapsed;
                                }
                                else
                                {
                                    SelectedBoucheSdB.VisibilityPiece = Visibility.Visible;
                                }
                            }
    }
    }
    private ObservableCollection<BoucheVMC> _ListBoucheSdB;
            public ObservableCollection<BoucheVMC> ListBoucheSdB
            {
                get => _ListBoucheSdB;
                set { _ListBoucheSdB = value; OnPropertyChanged(); }
            }
    private BoucheVMC _SelectedBoucheSdB;
    public BoucheVMC SelectedBoucheSdB
            {
                get => _SelectedBoucheSdB;
                set { _SelectedBoucheSdB = value; OnPropertyChanged(); }
            }
    en gros dans cet exemple cela me permet de cacher les répétitions. cela peut-être adaptable dans pas mal de situation.
    A toi d'adapter en mettant des conditions ou autre.

    En espérant t'avoir aider.
    Cordialement

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2010, 08h55
  2. Tétraèdrisation ne fonctionne que dans certains cas
    Par Rafy dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 15/12/2008, 20h51
  3. Effet fondu ne fonctionne que dans un sens
    Par Gaspoute dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/01/2008, 10h24
  4. ping que dans un sens
    Par guismoman33 dans le forum Réseau
    Réponses: 3
    Dernier message: 31/07/2007, 16h55
  5. [XP] Bureau à distance ne fonctionne que dans un sens
    Par beegees dans le forum Windows XP
    Réponses: 5
    Dernier message: 09/07/2006, 09h49

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