2016-08-26 10 views
2

私はイベントからどの時点で購読を中止するのですか?この時点まで、私は通常、購読する前にラインで購読を中止していました(またはイベントが呼び出されたほとんどの時間xamlによって処理され、余分な作業をする必要はありません)。 しかし、今私はコンストラクタに登録したいと思う状況にいるので、どこから退会しますか?私はアンロードされたイベントの中でそれをやろうとしましたが、 私のコントロールはしばしばアンロードされ、再作成せずに再びロードされます。カスタムコントロールのイベントを登録解除する場所

編集 私はオブジェクトがこれ以上必要ないとき退会したいことを明確にするために、私は廃棄私がオーバーライドできるメソッドまたはこのようなものがあることを期待していました。 アイデア

サンプルコード

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 > 

ので、時々、私は、ユーザーがどこか別の場所に移動できるようにして、同じインスタンスにカムバックすることが可能になります。ユーザーが戻るときにナビゲートするもう1つの時間は、新しいインスタンスになります。だから2番目の状況で、私はそのイベントから退会する必要があると思った。

ありがとうございました:)

+0

Loadedイベントで購読することができます。 –

+0

@WingerSendonこんにちは、私はそれをより明確にするために質問を編集しました。 SelectionChanged内のコードは決して実行されないため、Loadedイベントでは登録を解除できません。私はこのMyListBoxがもう必要ないときだけ、退会したいと思う。 – adminSoftDK

答えて

1

それはあなただけでSelectionChangedイベントを上書きしないと、イベント・サブスクリプションを扱うことができない理由がある、あなたは基本クラスとしてリストボックスを使用していたように見えますか?

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

    // Call base class implementation. 
    base.OnSelectionChanged(e); 
} 
関連する問題