2011-03-03 29 views
6

我有一个带有mainwindow和不同页面的WPF应用程序。在其中一个页面(OverzichtPage)我有一个文本框绑定到DataController(数据)。 (这是在页面的代码隐藏一个DependencyProperty)(可能是值得一提:在DataController类是一个Singleton,使病人应该保持不变,不能disapear ..)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}" /> 

在第一视线,这种约束似乎工作。当我通过单击按钮导航到另一页时

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

并导航回来,绑定突然停止工作。我在导航回来后发现,naamPatientTxtBox.GetBindingExpression(TextBox.TextProperty).ParentBinding;是空的。有人知道为什么这种绑定在导航后突然消失吗?我真的不明白这是如何可能的。

回答

6

您是否尝试将页面的KeepAlive属性设置为true? 您可能会遇到历史/缓存问题。国家不是自动保存的。

+0

非常感谢你Erno!这确实解决了问题!我是WPF的新手,不知道WPF页面中有什么像KeepAlive。 – StefK 2011-03-03 14:27:53

+0

这解决了绑定问题。但是如果我希望缓存不是持久的(即确保有新的页面)呢?这个文本框绑定泄漏问题是非常奇怪的,因为我认为RelayCommands仍然有效... – Goufalite 2017-03-15 08:49:23

+1

@Goufalite - 这是一个不同的问题,应单独发布。看看http://stackoverflow.com/questions/11654421/detect-navigationwindow-go-back-event – 2017-03-15 09:38:17

0

我会在父容器(当前窗口或页面)的Loaded事件中放置一个breakpointat,检查DataContext属性(它是否包含任何内容?)并尝试在需要时重置它。

另一个想法是,将TextBox.DataContext设置为Data,然后将文本设置为Patient.naam,这样,您将更容易对其进行调试,并且它将允许有效的DataContext继承。

+0

问题是它不是正在改变的DataContext。这是绑定本身,成为nullreference .. – StefK 2011-03-03 13:22:55