2009-05-21 18 views
2

In meiner App habe ich eine Gruppe von 3D-Objekten und sie sind durch eine TreeView dem Benutzer ausgesetzt. Wenn ein Benutzer ein Element in der Baumansicht auswählt, wird ein SelectedItemChanged-Ereignis ausgelöst, das entsprechende 3D-Objekt wird ausgewählt und im 3D-Renderfenster hervorgehoben. Das funktioniert gut.Auswählen eines TreeView-Elements ohne SelectedItemChanged aufzurufen?

Womit ich Probleme habe, ist das Gegenteil. In einem Abschnitt meines Codes programmiere ich das ausgewählte 3D-Objekt programmatisch in der Szene. Ich möchte das aktuell ausgewählte Objekt in der TreeView widerspiegeln, also laufe ich durch die Objekte, bis ich das entsprechende gefunden habe. Aber sobald ich dazu komme, kann ich keinen Weg finden, das Objekt ausgewählt erscheinen zu lassen, ohne dass SelectedItemChanged aufgerufen wird, was ich nicht will.

Gibt es eine Möglichkeit, dies zu tun?

Danke!

Antwort

3

Ich nehme an, Sie möchten den Code in Ihrem Event-Handler unterdrücken? Wenn ja, ist ein gemeinsamer Weg, dies zu tun mit einem boolean-Flag (oder manchmal ein int-Zählern):

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

Hallo Marc! Das war meine erste Idee, aber da ich vielleicht viele Steuerelemente habe, die sich ähnlich verhalten sollten, könnte es nicht sehr gut skalieren. Ich hatte gehofft, eine solche Lösung zu vermeiden, aber ich muss vielleicht grinsen und es ertragen. – djcouchycouch

+0

So würde ich es machen. Ich könnte mich irren, aber ich sehe kein Skalierungsproblem. Sie brauchen nur das eine Flag - oder vielleicht eines für jedes Steuerelement, das im Fall von Kaskaden nicht reagieren soll -, das Sie sich merken müssen, wenn Sie einen "code selects the control" -Aufruf schreiben. – RolandTumble

0

Wäre es sinnvoll sein, die vorübergehend SelectedItemChanged Ereignishandler TreeView zu entfernen und erneut hinzufügen, sobald Sie‘ Haben Sie die notwendigen Operationen durchgeführt? Ich habe es selbst nicht versucht, aber es ist das Einzige, was ich mir vorstellen kann (Marc Gravell hat mich auf meine ursprüngliche Antwort geschlagen - ich habe DAS schon vorher getan;)).

Viel Glück!

Verwandte Themen