2011-03-03 15 views
6

Tengo una aplicación WPF con una ventana principal y diferentes páginas. En una de las páginas (OverzichtPage) tengo un textBox vinculado a un DataController (Data). (Que es una propiedad de dependencia en el código subyacente de la página) (podría ser vale la pena mencionar: el DataController es un Singleton, por lo que se supone que el paciente permanezca igual y no puede desaparecerá ..)WPF textbox binding desaparece después de navegar adelante y atrás

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}" /> 

Al principio vista, esta unión parece funcionar. Cuando navego a otra página haciendo clic en un botón

<Button Content="Meer info/ Wijzigen" Click="MeerInfoWijzigenBtn_Click" /> 

private void MeerInfoWijzigenBtn_Click(object sender, RoutedEventArgs e) 
    { 
     Uri pageFunctionUri = new Uri("View/ZorgTrajectPage1.xaml", UriKind.Relative); 
     NavigationService.Navigate(pageFunctionUri); 
    } 

y navego hacia atrás, la vinculación deja de funcionar repentinamente. Descubrí después de la navegación, el naamPatientTxtBox.GetBindingExpression (TextBox.TextProperty) .ParentBinding; esta vacio. ¿Alguien tiene una pista de por qué este enlace repentinamente desaparece después de la navegación? Realmente no entiendo cómo esto es posible.

Respuesta

6

¿Has probado configurar la propiedad KeepAlive de la página como verdadera? Es posible que se encuentre con problemas de historial/almacenamiento en caché. El estado no se guarda automáticamente.

+0

Muchas gracias Erno! ¡Eso resolvió el problema de hecho! Soy nuevo en WPF y no sabía que había algo como KeepAlive en las páginas de WPF. – StefK

+0

Esto resuelve el problema vinculante. Pero, ¿y si quiero que el caché no sea persistente (es decir, asegúrese de tener una página nueva)? Este problema de fuga de enlace en el cuadro de texto es muy extraño porque supongo que los RelayCommands aún funcionan ... – Goufalite

+1

@Goufalite: esa es una pregunta diferente y debe publicarse por separado. Eche un vistazo a http://stackoverflow.com/questions/11654421/detect-navigationwindow-go-back-event –

0

Poner un breakpointat el evento cargado del contenedor principal (ventana o página actual), verificar la propiedad DataContext (¿contiene algo?) Y tratar de restablecer si es necesario.

Otra idea sería establecer el TextBox.DataContext en Datos, luego el texto en Patient.naam, de esta forma, será más fácil depurarlo, también permitirá una herencia DataContext eficiente.

+0

El problema es que no es el DataContext el que está cambiando. Es la unión misma la que se convierte en una referencia nula. – StefK