¿Hay una manera de enlazar un comando para el evento colapsado de todos TreeViewItems en una vista de árbol?

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

Pregunta

Estoy tratando de hacer algo similar a lo que la persona en cuestión este quería hacer.

¿Hay cualquier , más elegante, manera de hacer esto que el trabajo en torno sugerido allí?

(como último recurso) ¿Existe un marco MVVM diferente que tendría un mejor soporte para hacer esto?

En este momento estoy tratando de hacer un control personalizado que hereda de la vista de árbol, como esto:

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

A continuación, se unen el comando Quiero fuego, a la propiedad de dependencia ItemCollapsedCommand. Sin embargo, incluso esto no está funcionando.

Me aparece un InvalidOperationException: "Procesamiento Dispatcher se ha suspendido, pero todavía se están procesando los mensajes."

¿Alguna idea?

¿Fue útil?

Solución

No he utilizado la clase "EventToCommand" se describe en el enlace que se hace referencia. Pero prueba el uno en este post: http://sachabarber.net/?p=514 . Acabo de escribir una pequeña muestra utilizando la clase CommandBehavior en ese puesto y yo era capaz de conectar un comando al evento IsCollapsed del TreeViewItem con la siguiente 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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top