Gibt es eine Möglichkeit, einen Befehl zu dem kollabierten Ereignisse aller TreeViewItems in einem treeview zu binden?

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

Frage

Ich versuche, etwas ähnliches zu tun, was die Person in diese Frage tun wollte.

Gibt es jede , elegante, Art und Weise, dies zu tun, als die Work-around dort vorgeschlagen?

(Als letztes Mittel) Gibt es eine andere mvvm Framework, das eine bessere Unterstützung, dies zu tun haben würde?

Im Moment bin ich versuche, eine benutzerdefinierte Kontrolle, dass erbt von der Baumansicht zu machen, wie folgt aus:

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

Ich würde dann binden Sie den Befehl ich Feuer wollen, auf die ItemCollapsedCommand dependancy Eigenschaft. Doch selbst diese nicht funktioniert.

Ich halte einen InvalidOperationException bekommen: „Dispatcher-Verarbeitung ausgesetzt wurde, aber Nachrichten verarbeitet werden, noch werden.“

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich habe nicht die „EventToCommand“ Klasse beschrieben in dem Link verwiesen wird verwendet. Aber versuchen, den man in diesem Beitrag: http://sachabarber.net/?p=514 . Ich schrieb nur ein kleines Beispiel der CommandBehavior Klasse in diesem Beitrag mit und ich konnte einen Befehl an das isCollapsed Ereignis des TreeViewItem mit folgenden XAML anbringt:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top