2014-08-28 5 views
1

J'ai une application avec 2 onglets qui sont A et B. Les deux de l'onglet a 2 boutons. En outre hors de l'onglet a obtenu 1 bouton OK. (Voir capture d'écran)un bouton cliquez sur le bouton désactiver d'autres dans wpf

enter image description here

Je 3 modèles de vue, qui sont SampleApplication, Tab A et Tab B et ne liant.

Exemple d'application XAML

<DockPanel LastChildFill="True"> 
    <TabControl TabStripPlacement="Left" DockPanel.Dock="Left" Margin="5"> 
     <TabItem Width="190" Margin="1"> 
      <TabItem.Header> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="Tab A" Margin="5,0,0,0" VerticalAlignment="Center" /> 
       </StackPanel> 
      </TabItem.Header> 
      <TabItem.ContentTemplate> 
       <DataTemplate> 
        <ptab:TabA /> 
       </DataTemplate> 
      </TabItem.ContentTemplate> 
     </TabItem> 
     <TabItem Margin="1"> 
      <TabItem.Header> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="TabB" Margin="5,0,0,0" VerticalAlignment="Center" /> 
       </StackPanel> 
      </TabItem.Header> 
      <TabItem.ContentTemplate> 
       <DataTemplate> 
        <ptab:TabB /> 
       </DataTemplate> 
      </TabItem.ContentTemplate> 
     </TabItem> 
    </TabControl> 
</DockPanel> 

Exemple d'application Voir modèle

public class SampleApplicationViewModel 
{ 
    private TabAViewModel tabAViewModel; 

    public TabAViewModel TabAVM 
    { 
     get { return tabAViewModel; } 
     set { tabAViewModel= value; } 
    } 

    private TabBViewModel tabBViewModel; 

    public TabBViewModel TabBVM 
    { 
     get { return tabBViewModel; } 
     set { tabBViewModel= value; } 
    } 

    public MainViewModel() 
    { 
     tabAViewModel= new TabAViewModel(); 
     tabBViewModel= new TabBViewModel(); 
    } 
} 

Comment mettre en œuvre

  1. lorsque je clique sur l'onglet Bouton 1 ou 2, boutons dans l'onglet B et OK sera désactivé.
  2. Lorsque vous cliquez sur le bouton OK, les boutons Tab A ou B seront désactivés.
  3. Si vous cliquez sur le bouton 1 ou 2 de l'onglet B, le bouton A et le bouton OK seront désactivés.

* (désactiver autour 5-10sec, puis seront les boutons permettront retour)

aucun cadre de prisme et etc.

Répondre

0

à l'aide Le problème ici est que vous pensez à la question de manière incorrecte. La question n'est pas "Comment désactiver ces boutons?" La question devrait être: «Dans quel état se trouve l'habileté des boutons liés? Pour que cela fonctionne, les gestionnaires de commande de boutons doivent définir une variable (état) qui provoque la désactivation des autres boutons. Notez que cela signifie qu'il y a une dépendance (possiblement indésirable) entre vos deux onglets, mais avec vos exigences, c'était probablement inévitable.

Fondamentalement, vous devez avoir vos boutons ressembler à:

<Button IsEnabled="{Binding SomeProperty}" Command="{Binding SomeCommand}"/> 

Où « SomeProperty » est modifiée par une fonction qui est invoquée par les autres gestionnaires de « unecommandequelconque » (pour les autres boutons).

Espérons que c'est clair! Faites moi savoir si vous avez des questions.

+0

merci pour la réponse fera et mettre à jour bientôt – user1219310

+0

Bonjour @BradleyDotNET, suis-je capable d'utiliser cette approche en suivant cet exemple? http://www.codeproject.com/Articles/28081/How-to-place-all-WPF-commands-and-related-events-c – user1219310

+0

Non, cet article résout le problème que j'ai soulevé avec l'autre réponse. J'évite autant que possible les classes statiques, donc je n'utiliserais pas cette approche sauf si je devais le faire. – BradleyDotNET

0

Si vous utilisez ICommand, vous pouvez souscrire les boutons les uns aux autres CanExecuteChanged événement de sorte que le bouton dépendant peut activer lui-même une fois que chaque CanExecuteChanged est levée. Vous devez ajouter un CanExecuteChanged_Handler à chaque commande afin que lorsque le gestionnaire est appelé, vous pouvez vérifier qui était l'expéditeur et modifier son état canExecute.

+0

Ce serait probablement difficile de faire le contrôle de l'utilisateur. Je pense que vous êtes sur la bonne voie (en quelque sorte) mais cela nécessite beaucoup plus de détails. En outre, 'CanExecute' et' CanExecuteChanged' sont * vraiment * difficile de travailler avec :( – BradleyDotNET

+0

@BradleyDotNET je suis d'accord avec vous.il devrait trouver un endroit commun où il peut initialiser ces ICommand. – berkeleyjuan

+0

@berkeleyjuan Salut les gars, merci pour répondre et fera mettre à jour la réponse bientôt xD – user1219310

Questions connexes