选择TreeView项而不调用SelectedItemChanged?

时间:2009-05-21 19:58:04

标签: c# wpf

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

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

有办法做到这一点吗?

谢谢!

2 个答案:

答案 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打败了我原来的答案 - 我以前做过那件事;)。)

祝你好运!