C'è un modo per associare un comando per l'evento crollo di tutte le TreeViewItems in una vista ad albero?

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

Domanda

che sto cercando di fare qualcosa di simile a ciò che la persona in questa domanda voleva fare.

C'è qualsiasi , più elegante, modo per fare questo che il work-around suggerito lì?

(Come ultima risorsa) Esiste un quadro MVVM diverso che avrebbe avuto un supporto migliore per fare questo?

In questo momento sto cercando di fare un controllo personalizzato che eredita dalla vista ad albero, in questo modo:

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);
    }

Vorrei poi legano il comando che voglio il fuoco, alla proprietà dipendenza ItemCollapsedCommand. Tuttavia, anche questo non sta funzionando.

Continuo a ricevere un InvalidOperationException: "Elaborazione Dispatcher è stato sospeso, ma i messaggi sono ancora in fase di elaborazione."

Tutte le idee?

È stato utile?

Soluzione

Non ho usato la classe "EventToCommand" descritto nel link si fa riferimento. Ma provare l'uno in questo post: http://sachabarber.net/?p=514 . Ho appena scritto un po 'di esempio utilizzando la classe CommandBehavior in questo post e sono stato in grado di collegare un comando per l'evento isCollapsed del TreeViewItem con il seguente XAML:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top