我有一个TreeView控件,在添加一个新节点后,我需要执行一些自定义代码(扩展节点,使其可见,并激活begind编辑方法)。因为我想在TreeView控件的每个实例中都可以使用它,所以我想到了TreeView控件的子类化。
现在,为了让treeview知道添加新节点的时间,它将具有在添加项目时触发的事件(它不会被触发),或者具有对已执行的命令的引用添加一个新项目。
所以有两个问题:
1)有没有办法在TreeView中添加一个事件,只要添加treenode就会被触发(我总是通过ViewModel的源集合添加节点) - 我找不到任何方法来执行此操作
2)我可以向TreeList添加一个AddCommand属性,该属性将绑定到ViewModel的AddCommand,然后有一些按钮或ContextMenu项目将绑定到TreeList.AddCommand,而不是视图模型。这样TreeView将保留对AddCommand的引用,但缺点是实际使用会有点奇怪。问题:我怎么知道TreeView的AddCommand(或任何命令)何时被执行,所以我可以在它之后发出一些自定义代码?似乎CommandManager.AddExecutedHandler是一个解决方案,但我无法执行它。
答案 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);
}
}