执行命令后执行自定义代码

时间:2012-04-29 13:58:54

标签: wpf silverlight

我有一个TreeView控件,在添加一个新节点后,我需要执行一些自定义代码(扩展节点,使其可见,并激活begind编辑方法)。因为我想在TreeView控件的每个实例中都可以使用它,所以我想到了TreeView控件的子类化。

现在,为了让treeview知道添加新节点的时间,它将具有在添加项目时触发的事件(它不会被触发),或者具有对已执行的命令的引用添加一个新项目。

所以有两个问题:

1)有没有办法在TreeView中添加一个事件,只要添加treenode就会被触发(我总是通过ViewModel的源集合添加节点) - 我找不到任何方法来执行此操作

2)我可以向TreeList添加一个AddCommand属性,该属性将绑定到ViewModel的AddCommand,然后有一些按钮或ContextMenu项目将绑定到TreeList.AddCommand,而不是视图模型。这样TreeView将保留对AddCommand的引用,但缺点是实际使用会有点奇怪。问题:我怎么知道TreeView的AddCommand(或任何命令)何时被执行,所以我可以在它之后发出一些自定义代码?似乎CommandManager.AddExecutedHandler是一个解决方案,但我无法执行它。

1 个答案:

答案 0 :(得分:0)

这有什么帮助吗?

public class CustomTreeControl : TreeView
{
    ...

    // WPF only
    protected override void OnItemsSourceChanged(IEnumerable oldValue, IEnumerable newValue)
    {
        base.OnItemsSourceChanged(oldValue, newValue);

        Debug.WriteLine("OnItemsSourceChanged");
    }

    // WPF + Silverlight
    protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
    {
        base.OnItemsChanged(e);

        Debug.WriteLine("OnItemsChanged: {0}", e.Action);
    }
}