2011-03-03 2 views
6

주 윈도우와 다른 페이지가있는 WPF 응용 프로그램이 있습니다. 페이지 (OverzichtPage) 중 하나에서 TextBox를 DataController (Data)에 바인딩했습니다. 처음에는WPF 텍스트 상자 바인딩이 앞으로 및 뒤로 다시 이동 한 후에 사라집니다.

public static DependencyProperty data = DependencyProperty.Register("Data", typeof(DataController), typeof(OverzichtPage)); 
    public DataController Data 
    { 
     get { return (DataController)GetValue(data); } 
     set { SetValue(data, value); } 
    } 


<TextBox Name="naamPatientTxtBox" Text="{Binding Path=Data.Patient.naam, Mode=TwoWay}" DataContext="{Binding ElementName=OP}" /> 

: (즉, 환자가 동일하게 유지하기로하고 사라지는 할 수 있도록 DataController는, 싱글 톤입니다 .. 언급 할 가치가있을 수 있음) (이 페이지의 코드 숨김에 DependencyProperty에있다) 시력,이 구속력이 작용하는 것 같습니다.

을 클릭하여 다른 페이지로 이동할 때 바인딩이 갑자기 작동하지 않습니다. 탐색 한 후에 naamPatientTxtBox.GetBindingExpression (TextBox.TextProperty) .ParentBinding을 발견했습니다. 비었다. 누가이 바인딩이 탐색 후 갑자기 사라지는 지에 대한 단서가 있습니까? 나는 이것이 어떻게 가능한지 정말로 이해하지 못한다.

답변

6

페이지의 KeepAlive 속성을 true로 설정해 보았습니까? 기록/캐싱 문제가 발생했을 수 있습니다. 상태가 자동으로 유지되지 않습니다.

+0

대단히 감사합니다 Erno! 참으로 그 문제를 해결했습니다! WPF에 익숙하지 않고 WPF 페이지에 KeepAlive와 같은 것이 있다는 것을 알지 못했습니다. – StefK

+0

이것은 바인딩 문제를 해결합니다. 하지만 캐시를 지속성이 없도록 (즉, 새로운 페이지가 있는지) 확인하려면 어떻게해야합니까? RelayCommands가 여전히 작동한다고 가정하기 때문에 텍스트 상자의 바인딩 누출 문제는 매우 이상합니다. – Goufalite

+1

@Goufalite - 다른 질문이므로 별도로 게시해야합니다. http://stackoverflow.com/questions/11654421/detect-navigationwindow-go-back-event에서 살펴보십시오. –

0

부모 컨테이너 (현재 창 또는 페이지)의 Loaded 이벤트를 breakpointat에 두었고 DataContext 속성을 확인한 다음 (필요한 경우)? 필요할 경우 재설정하려고 시도합니다.

또 다른 아이디어는 TextBox.DataContext를 Data로 설정 한 다음 Patient.naam으로 텍스트를 설정하면 디버깅하기가 더 쉬워지고 효율적인 DataContext 상속을 허용합니다.

+0

문제는 변경중인 DataContext가 아니라는 것입니다. 그것은 nullreference가되는 바인딩 자체입니다. – StefK

관련 문제