我正在尝试做类似于该人的事情 问题想做。

有没有 任何, ,更优雅,做到这一点的方法比在那里的工作建议?

(作为最后的手段)是否有不同的MVVM框架可以更好地支持这样做?

现在,我正在尝试制作从TreeView继承的自定义控件,例如:

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

然后,我将绑定要触发的命令,以绑定到ItemCollapsedCommand依赖属性。但是,即使这行不通。

我一直得到一个 InvalidOperationException:“调度员处理已被暂停,但仍在处理消息。”

有任何想法吗?

有帮助吗?

解决方案

我尚未使用您引用的链接中描述的“ eventtocommand”类。但是请尝试本文中的一篇: http://sachabarber.net/?p=514. 。我刚刚在该帖子中使用CommandBehavior类写了一个小示例,我能够将命令附加到TreeViewItem的ISCollapsed事件上,并使用以下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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top