2013-10-02 11 views
8

私はDependencyPropertyの変更を聞きたいです。このコードは動作しますが、CustomControlを持つすべてのリロードページの後依存関係のプロパティがコールバックを変更 - 複数の呼び出し

public partial class CustomControl : UserControl 
{ 
    public CustomControl() 
    { 
     InitializeComponent(); 
    } 

    public bool IsOpen 
    { 
     get { return (bool)GetValue(IsOpenProperty); } 
     set { SetValue(IsOpenProperty, value); } 
    } 

    public static readonly DependencyProperty IsOpenProperty = 
     DependencyProperty.Register("IsOpen", typeof(bool), typeof(CustomControl), new PropertyMetadata(IsOpenPropertyChangedCallback)); 

    private static void IsOpenPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     Debug.WriteLine("Fire!"); 
    } 
} 

更新

... ViewModelに

private bool _isOpen; 
public bool IsOpen 
{ 
    get { return this._isOpen; } 
    set { this.Set(() => this.IsOpen, ref this._isOpen, value); } // MVVM Light Toolkit 
} 

ビュー

<local:CustomControl IsOpen="{Binding Path=IsOpen}" /> 
複数回呼び出されるコールバックメソッドであります

サンプル

  • project

    1. タップ "2ページ"
    2. タップ "真"(出力ウィンドウを見て)
    3. タップ "2ページ"
    4. バック
    5. を行きます"false"をタップ(出力ウィンドウを見る)
+0

XAMLはどこですか?あなたは財産に拘束力を持っていますか? –

+0

私はより多くの情報を追加しました。 –

答えて

3

これは私の問題を解決しました。

this.Unloaded += CustomControlUnloaded; 

private void CustomControlUnloaded(object sender, RoutedEventArgs e) 
{ 
    this.ClearValue(CustomControl.IsOpenProperty); 
} 
+0

とアイデアのために1。私は私の記憶を食べていた何かを探していました。これを行うことによって解決される。 –

1

イベントがトリガーされた回数は、コントロールでページを開いた回数に関係します。これはあなたがページの複数のインスタンスを持っていることを示唆しています。

あなたのページは、ページが正しく破壊されないようにするためのものです。
残念ながら、コードを見ることができないと、これを引き起こしていることを言うことは不可能です。おそらくあなたはコードでイベントに登録していて、それを購読していないのかもしれません。 (私は、電話アプリでそれが多くを参照してください)

+0

これは間違いありません。それは私には2〜3回起こり、イベントハンドラを削除しないように追跡しました。 –

0

何が起こっているのは、SecondPageViewが複数回読み込まれているということです。新しいインスタンスが作成されるたびに、データコンテキストにバインドされ、ビューモデルからIsOpenの値が取得されます。次に、依存関係プロパティが設定されます。

これは実際には望ましい動作です。プロパティが再度設定されなかった場合、ビューモデルの状態はページに反映されません。携帯電話のネイティブナビゲーションAPIを使用して古いページインスタンスに転送する方法はありません。

+0

さて、私はこの動作で何ができるのですか? –

+0

なぜこれが問題なのか説明してください... –

関連する問題