2015-07-21 2 views
1

Utilisation du style MVVM'ish de WPF. Essayer de créer un RibbonGallery avec des éléments qui sont cliquables pour une raison quelconque, je ne peux pas obtenir les éléments pour lancer ma commande déléguéObjets RibbonGallery Commande Cliquez sur

XAML CODE:

<RibbonMenuButton LargeImageSource="Images/DeleteUser1.png" Label="Delete"> 
        <RibbonGallery> 
         <RibbonGalleryCategory ItemsSource="{Binding AvailibleUsers}" Header="User List"> 
          <RibbonGalleryCategory.ItemTemplate> 
           <DataTemplate> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="Auto" /> 
              <ColumnDefinition Width="*" /> 
             </Grid.ColumnDefinitions> 
             <Image Source="Images/DeleteUser1.png" Width="25"/> 
             <ContentPresenter Content="{Binding}" Grid.Column="1"> 
              <ContentPresenter.InputBindings> 
               <MouseBinding MouseAction="LeftClick" Command="{Binding CommandDeleteAllPermissions}"/> 
              </ContentPresenter.InputBindings> 
             </ContentPresenter> 
            </Grid> 
           </DataTemplate> 
          </RibbonGalleryCategory.ItemTemplate> 
         </RibbonGalleryCategory> 
        </RibbonGallery> 
       </RibbonMenuButton> 

Le datacontext a été défini sur un modèle de vue. ViewModel:

public DelegateCommand CommandDeleteAllPermissions { get { return new DelegateCommand(Delegated_DeleteAllPermissions); } } 

    private void Delegated_DeleteAllPermissions(object obj) 
    { 
      \\todo:stuff 
    } 

i ont testé cette commande en utilisant un bouton standard et il déclenche, mais en utilisant le code XAML spécifique je ne peux pas obtenir des éléments cliquables dans mon contrôle RibbonGallery.

Des idées?

+0

Pourriez-vous poster plus de code ViewModel? De plus, pourquoi faites-vous ceci:

+0

nécessité de déplacer le contenu vers une autre partie de la grille afin que je puisse avoir un groovy icône :) je ne suis pas sûr de ce qu'il faut d'autre que je ne veux pas vraiment poster toute viewmodel. ce que je peux vous dire si je l'utilise et je clique sur ce bouton, il est très bien. –

Répondre

2

Les galeries sont des sortes de listes catégorisées dont les éléments peuvent être vérifiés. Ils conviennent, lorsque vous avez besoin d'un menu d'options, où l'utilisateur doit vérifier/décocher les éléments:

enter image description here

C'est le XAML pour la galerie et vue de l'échantillon lié aux données modèle:

  <RibbonMenuButton Label="FooGallery"> 
       <RibbonGallery> 
        <RibbonGalleryCategory ItemsSource="{Binding GalleryItems}"> 
         <RibbonGalleryCategory.ItemContainerStyle> 
          <Style TargetType="{x:Type RibbonGalleryItem}"> 
           <Setter Property="Content" Value="{Binding Content}"/> 
           <Setter Property="IsSelected" Value="{Binding IsSelected}"/> 
          </Style> 
         </RibbonGalleryCategory.ItemContainerStyle> 
        </RibbonGalleryCategory> 
       </RibbonGallery> 
      </RibbonMenuButton> 

ici GalleryItems est une collection de ces modèles de vue:

public class GalleryItem 
{ 
    public object Content { get; set; } 

    public bool IsSelected 
    { 
     get { return isSelected; } 
     set 
     { 
      if (isSelected != value) 
      { 
       isSelected = value; 

       // TODO: do something here, when item becomes selected/checked; 
       // handle property changing instead of commands 

      } 
     } 
    } 

    private bool isSelected; 
} 

Si vous avez besoin le menu déroulant pour exécuter une commandes, vous devez utiliser RibbonMenuItem réguliers s:

enter image description here

Voici comment cela devrait être fait, lorsque les éléments de menu sont statiquement connus:

  <RibbonMenuButton Label="Foo"> 
       <RibbonMenuItem Header="Bar1" Command="{Binding Bar1Command}"/> 
       <RibbonMenuItem Header="Bar2" Command="{Binding Bar2Command}"/> 
       <RibbonMenuItem Header="Bar3" Command="{Binding Bar3Command}"/> 
      </RibbonMenuButton> 

Lorsque vous utilisez ItemsSource des éléments de menu, XAML ressemblera à ceci:

  <RibbonMenuButton Label="Foo" ItemsSource="{Binding MenuItems}"> 
       <RibbonMenuButton.ItemContainerStyle> 
        <Style TargetType="{x:Type RibbonMenuItem}"> 
         <Setter Property="Header" Value="{Binding Header}"/> 
         <Setter Property="Command" Value="{Binding Command}"/> 
        </Style> 
       </RibbonMenuButton.ItemContainerStyle> 
      </RibbonMenuButton> 

MenuItems est co lection de ces modèles de vue:

public class MenuItemVm 
{ 
    public object Header { get; set; } 
    public ICommand Command { get; set; } 
} 
0

Voir je voulais lier la source des éléments. comme la source de l'article change fréquemment. En procédant ainsi, je devrais modifier ma collection de chaînes en un objet personnalisé et faire en sorte que chaque objet contienne une ICommand ou d'autres objets. cela impliquerait également que le programmeur ViewModel change ses choses.

Comme je suis seulement pour changer la vue.

i insted juste fait ce

   <RibbonMenuButton LargeImageSource="Images/DeleteUser1.png" Label="Delete" ItemsSource="{Binding AvailibleUsers}"> 
        <RibbonGallery Command="{Binding CommandDeleteAllPermissions}"> 
         <RibbonGalleryCategory ItemsSource="{Binding AvailibleUsers}" Header="User List"> 
          <RibbonGalleryCategory.ItemTemplate> 
           <DataTemplate> 
            <Grid> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="Auto" /> 
              <ColumnDefinition Width="*" /> 
             </Grid.ColumnDefinitions> 
             <Image Source="Images/DeleteUser1.png" Width="25"/> 
             <ContentPresenter Content="{Binding}" Grid.Column="1"/> 
            </Grid> 
           </DataTemplate> 
          </RibbonGalleryCategory.ItemTemplate> 
         </RibbonGalleryCategory> 
        </RibbonGallery> 
       </RibbonMenuButton> 

i juste besoin d'ajouter la commande ici

<RibbonGallery Command="{Binding CommandDeleteAllPermissions}"> 

et maintenant tous les éléments de la galerie déclenchent la commande lorsque vous cliquez dessus.

Merci pour l'aide de tout le monde