首页 文章

选择TreeView项而不调用SelectedItemChanged?

提问于
浏览
2

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

我遇到的问题恰恰相反 . 在我的代码的一部分中,我以编程方式在场景中设置所选的3d对象 . 我想反映TreeView中当前选择的对象,所以我会遍历这些项目,直到找到相应的对象 . 但是一旦我到达它,我找不到一种方法来使项目看起来没有调用SelectedItemChanged,这不是我想要的 .

有没有办法做到这一点?

谢谢!

2 回答

  • 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;
        }
    }
    
  • 0

    是否适合暂时删除TreeView的SelectedItemChanged事件处理程序,并在执行必要的操作后重新添加它?我自己没有尝试过,但这是我能想到的唯一一件事(Marc Gravell打败了我原来的答案 - 我以前做过的;)) .

    祝好运!

相关问题