在我的应用程序中,我有一组3d对象,它们通过TreeView向用户显示。当用户选择TreeView中的项目时,会触发SelectedItemChanged事件,相应的3d对象将被设置为选中并在3d渲染窗口中突出显示。这很好。
我遇到的问题恰恰相反。在我的代码的一部分中,我以编程方式在场景中设置所选的3d对象。我想反映TreeView中当前选择的对象,所以我会遍历这些项目,直到找到相应的对象。但是一旦我到达它,我找不到一种方法来使项目看起来没有调用SelectedItemChanged,这不是我想要的。
有办法做到这一点吗?
谢谢!
答案 0 :(得分:3)
我认为你想要压制事件处理程序中的代码?如果是这样,一个常见的方法是使用布尔标志(或者有时是一个int计数器):
bool updatingSelected;
void SomeHandler(object sender, EventArgs args) { // or whatever
if(updatingSelected) return;
//...
}
void SomeCode() {
bool oldFlag = updatingSelected;
updatingSelected = true;
try {
// update the selected item
} finally {
updatingSelected = oldFlag;
}
}
答案 1 :(得分:0)
暂时删除TreeView的SelectedItemChanged事件处理程序,并在执行必要的操作后重新添加它是否合适?我自己没有尝试过,但这是我能想到的唯一一件事(Marc Gravell打败了我原来的答案 - 我以前做过那件事;)。)
祝你好运!