Est-il un moyen de lier une commande à l'événement affaissé de tous TreeViewItems dans un TreeView?

StackOverflow https://stackoverflow.com/questions/3589589

Question

Je suis en train de faire quelque chose de semblable à ce que la personne en question cette voulait faire.

Y at-il tout , plus élégant, façon de le faire que le travail autour il suggéré?

(En dernier recours) Y at-il un cadre MVVM différent qui aurait un meilleur soutien pour le faire?

En ce moment je suis en train de faire un contrôle personnalisé qui hérite de l'arborescence, comme ceci:

public ModdedTreeView()
    {
        this.AddHandler(TreeViewItem.CollapsedEvent, new RoutedEventHandler(ItemCollapsed));
    }

public RelayCommand<RoutedEventArgs> ItemCollapsedCommand
    {
        get { return (RelayCommand<RoutedEventArgs>)GetValue(ItemCollapsedCommandProperty); }
        set { SetValue(ItemCollapsedCommandProperty, value); }
    }

    // Using a DependencyProperty as the backing store for ItemCollapsedCommand.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ItemCollapsedCommandProperty =
        DependencyProperty.Register("ItemCollapsedCommand", typeof(RelayCommand<RoutedEventArgs>), typeof(ModdedTreeView), new UIPropertyMetadata(null));

protected void ItemCollapsed(object sender, RoutedEventArgs e)
    {
        if (ItemCollapsedCommand != null)
            ItemCollapsedCommand.Execute(e);
    }

Je voudrais ensuite lier la commande que je veux le feu, à la propriété ItemCollapsedCommand dépendance. Cependant, même cela ne fonctionne pas.

Je continue de recevoir un InvalidOperationException: « Traitement Dispatcher a été suspendu, mais les messages sont encore en cours de traitement ».

Toutes les idées?

Était-ce utile?

La solution

Je n'ai pas utilisé la classe « EventToCommand » décrit dans le lien que vous avez mentionné. Mais essayez celui de ce poste: http://sachabarber.net/?p=514 . Je viens d'écrire un petit échantillon en utilisant la classe CommandBehavior dans ce poste et j'ai pu joindre une commande à l'événement isCollapsed du TreeViewItem avec le XAML suivant:

<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="local:CommandBehavior.TheCommandToRun" Value="{Binding MyCommand}"/>
            <Setter Property="local:CommandBehavior.RoutedEventName" Value="Collapsed"/>
        </Style>
    </TreeView.ItemContainerStyle>

    <TreeViewItem Header="Item">
        <TreeViewItem Header="Item">
            <TreeViewItem Header="Item"/>
        </TreeViewItem>
    </TreeViewItem>
</TreeView>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top