在我的应用程序中,我有一组3d对象,它们通过TreeView向用户公开。当用户在TreeView中选择一个项目时,将触发SelectedItemChanged事件,相应的3d对象被设置为选中状态,并在3d渲染窗口中突出显示。这很好。

我遇到的是相反的情况。在代码的一部分中,我以编程方式设置了场景中选定的3d对象。我想在TreeView中反映当前选择的对象,因此我逐项检查直到找到相应的对象。但是一旦找到它,就无法找到一种方法来使项目在不调用SelectedItemChanged的情况下被选中,这不是我想要的。

有没有办法做到这一点?

谢谢!

最佳答案

我认为您想隐藏事件处理程序中的代码?如果是这样,执行此操作的常用方法是使用布尔标志(有时是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;
    }
}

07-27 21:41