2016-08-26 1 views
2

Ich frage mich, wann ich mich von einer Veranstaltung abmelden kann. Bis zu diesem Punkt habe ich mich normalerweise in der Leitung abgemeldet, bevor ich abonniert habe (oder die meiste Zeit, von der die Veranstaltung aufgerufen wurde) xaml, was dann von xaml gehandhabt wird und keine zusätzliche Arbeit nötig ist). Aber jetzt bin ich in einer Situation, in der ich mich beim Konstruktor anmelden möchte, wo kann ich mich abmelden? Ich habe versucht, es im entladenen Ereignis zu tun, , aber meine Kontrolle wird oft entladen und dann wieder geladen, ohne es neu zu erstellen.Wo kann ich mich von einem Ereignis für ein benutzerdefiniertes Steuerelement abmelden?

bearbeiten Um es klar, dass ich, wenn das Objekt annullieren nicht mehr gebraucht wird, ich hatte gehofft, dass es Dispose-Methode ist ich so außer Kraft setzen oder etwas kann. Irgendwelche Ideen?

Beispielcode

public class MYListBox : ListBox 
{ 
    public MYListBox() 
    { 
     SelectionChanged += MYListBox_SelectionChanged; 
     Unloaded += MYListBox_Unloaded; 
    } 

    private void MYListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
    } 

    private void MYListBox_Unloaded(object sender, RoutedEventArgs e) 
    { 
     SelectionChanged -= MYListBox_SelectionChanged; 
     Unloaded -= MYListBox_Unloaded; 
    } 
} 

XAML

<UserControl x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:wpfApplication1="clr-namespace:WpfApplication1"> 
<wpfApplication1:MYListBox /> 
</UserControl > 

Also manchmal werde ich woanders die Benutzer navigieren lassen und es dann zu Comeback der gleichen Instanz ermöglichen. Ein anderes Mal, wenn der Benutzer navigiert, wenn er zurückkommt, wird es eine neue Instanz sein. In der zweiten Situation dachte ich, ich müsste mich von diesem Event abmelden.

Danke :)

+0

Sie können im Loaded-Ereignis abonnieren. –

+0

@WingerSendon Hallo, ich habe die Frage bearbeitet, um es klarer zu machen. Ich kann das Loaded-Ereignis nicht abmelden, weil dann mein Code in SelectionChanged niemals ausgeführt wird. Ich möchte mich nur abmelden, wenn ich diese MyListBox nicht mehr benötige. – adminSoftDK

Antwort

1

Es sieht aus wie Sie List-Box als Basisklasse verwendet haben, gibt es einen Grund, warum Sie nicht nur das Ereignis Selection außer Kraft setzen kann und nicht mit den Ereignisabonnements umgehen?

protected override void OnSelectionChanged(SelectionChangedEventArgs e) 
{ 
    // Do custom work. 

    // Call base class implementation. 
    base.OnSelectionChanged(e); 
} 
Verwandte Themen