2009-05-21 76 views
2

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

我遇到的麻烦是相反的。在我的代码的一部分,我编程设置场景中选定的3d对象。我想在TreeView中反映当前选中的对象,所以我会遍历这些项目直到找到相应的项目。但是一旦我找到它,我就无法找到一种方法让项目显示被选中,而不需要调用SelectedItemChanged,这不是我想要的。

有没有办法做到这一点?

谢谢!

回答

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

嗨,马克! 这是我的第一个想法,但由于我可能有许多应该行为相似的控件,它可能不能很好地扩展。我希望避免这样的解决方案,但我可能不得不笑笑并忍受它。 – djcouchycouch 2009-05-21 20:08:38

0

它是否会因此暂时删除TreeView的SelectedItemChanged事件处理程序,并重新添加它,一旦你”已经完成了必要的操作?我自己并没有尝试过,但这是我唯一能想到的其他事情(Marc Gravell打败了我的原始答案 - 我之前完成了这个);)。

祝你好运!