Есть ли способ привязать команду к свернутому событию всех TreeViewItems в виде дерева? - PullRequest
0 голосов
/ 28 августа 2010

Я пытаюсь сделать что-то похожее на то, что хотел сделать человек в этом вопросе.

Есть ли любой , более элегантный, способ сделать это, чем предложенный там обходной путь?

(В крайнем случае) Есть ли другая структура mvvm,будет иметь лучшую поддержку для этого?

Сейчас я пытаюсь создать пользовательский элемент управления, который наследует от дерева, например:

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

Затем я бы связал команду Iхотите запустить свойство зависимости ItemCollapsedCommand.Однако даже это не работает.

Я продолжаю получать InvalidOperationException: «Обработка диспетчера приостановлена, но сообщения все еще обрабатываются».

Есть идеи?

1 Ответ

1 голос
/ 28 августа 2010

Я не использовал класс EventToCommand, описанный в ссылке, на которую вы ссылались. Но попробуйте следующее в этом посте: http://sachabarber.net/?p=514. Я просто написал небольшой пример с использованием класса CommandBehavior в этом посте, и мне удалось присоединить команду к событию IsCollapsed TreeViewItem со следующим 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...