2013-10-02 16 views
8

Chcę posłuchać zmian w DependencyProperty. Ten kod działa, ale po każdej stronie reload z CustomControl jest metoda zwrotna nazywa wielokrotnie ...Właściwość zależności zmieniona wywołanie zwrotne - wielokrotne uruchamianie

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!"); 
    } 
} 

Aktualizacja

ViewModel

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

Zobacz

<local:CustomControl IsOpen="{Binding Path=IsOpen}" /> 

Próbka

  • project

    1. tap "Druga strona"
    2. tap "true" (spojrzeć na okna wyjściowego)
    3. wrócić
    4. tap "Druga strona"
    5. dotknij "false" (spójrz na okno wyjściowe)
+0

Gdzie jest XAML? Czy masz powiązania na nieruchomości? –

+0

Dodałem więcej informacji. –

Odpowiedz

3

To rozwiązało mój problem.

this.Unloaded += CustomControlUnloaded; 

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

plus 1 za pomysł. Szukałem czegoś, co pożera moją pamięć. rozwiązany w ten sposób. –

1

Wygląda na to, że liczba wywołań zdarzenia odnosi się do liczby uruchomień strony za pomocą kontrolki. Sugerowałoby to, że masz wiele instancji strony.

Problem polega na tym, że Twoje strony robią coś, co uniemożliwia ich prawidłowe zniszczenie.
Niestety, bez możliwości zobaczenia kodu, nie można powiedzieć, co to powoduje. Prawdopodobnie subskrybujesz wydarzenie w kodzie i nie zrezygnujesz z subskrypcji. (Widzę to wiele w aplikacjach Telefonowych.)

+0

Jest to zdecydowanie wiarygodne. Zdarzyło mi się to raz czy dwa i śledziłem, żeby nie usuwać programu obsługi zdarzeń, kiedy powinienem. –

0

Co się dzieje, że SecondPageView jest ładowany wiele razy. Za każdym razem, gdy tworzone jest nowe wystąpienie, wiąże się z kontekstem danych i pobiera wartość IsOpen z modelu widoku. Następnie ustawia się właściwość zależności.

Jest to pożądane zachowanie. Jeśli właściwości nie zostałyby ponownie ustawione, stan modelu widoku nie zostałby odzwierciedlony na stronie. Nie ma możliwości przekazania dalej - przejdź do starej instancji strony, korzystając z macierzystego interfejsu nawigacyjnego telefonu telefonu.

+0

OK, widzę ... czy jest coś, co mogę zrobić z tym zachowaniem? –

+0

Może, jeśli wyjaśnisz, dlaczego to jest problem ... –

Powiązane problemy