2013-10-02 8 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!"); 
    } 
} 

업데이트

... 뷰 모델

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. 탭을 "true"는
    3. 탭 "두 번째 페이지"
    4. 돌아갑니다 (출력 창에서 볼) "false"를 탭하십시오 (출력 창을보십시오)
+0

XAML은 어디에 있습니까? 이 건물에 바인딩이 있습니까? –

+0

더 많은 정보를 추가했습니다. –

답변

3

내 문제가 해결되었습니다.

this.Unloaded += CustomControlUnloaded; 

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

더하기 아이디어 1입니다. 나는 내 기억을 먹고있는 무언가를 찾고 있었다. 이렇게하면 해결됩니다. –

1

이벤트가 트리거되는 횟수는 컨트롤이있는 페이지를 여는 횟수와 관련이 있습니다. 이렇게하면 페이지의 인스턴스가 여러 개 있음을 알 수 있습니다.

문제는 실제로 페이지가 제대로 파괴되지 않도록하는 것입니다.
불행히도 코드를 볼 수 없으면 원인을 밝힐 수 없습니다. 아마 당신이 이벤트에 코드에 가입했는데 구독 취소하지 않았을 것입니다. (전화 앱에서 많이 볼 수 있습니다.)

+0

이것은 확실히 그럴듯합니다. 그것은 나에게 한 두 시간 만에 일어 났으며 이벤트 처리기를 제거하지 않도록 추적했습니다. –

0

무슨 일이 발생하는지는 SecondPageView이 여러 번로드되는 것입니다. 새 인스턴스가 생성 될 때마다 데이터 컨텍스트에 바인드되어 뷰 모델에서 IsOpen의 값을 검색합니다. 그런 다음 종속성 속성이 설정됩니다.

이것은 실제로 원하는 동작입니다. 속성을 다시 설정하지 않으면 뷰 모델의 상태가 페이지에 반영되지 않습니다. 휴대 전화의 네비게이션 API를 사용하여 이전 페이지 인스턴스로 전달 탐색 할 수있는 방법이 없습니다.

+0

그래, 알겠지만 ...이 행동으로 내가 뭘 할 수 있을까? –

+0

아마도 이것이 왜 문제인지 설명하면 ... –

관련 문제