【问题标题】:WPF textbox binding disappears after navigating forward and back againWPF文本框绑定在再次向前和向后导航后消失
【发布时间】:2011-03-03 22:32:42
【问题描述】:

我有一个带有主窗口和不同页面的 WPF 应用程序。在其中一页 (OverzichtPage) 上,我有一个绑定到 DataController (Data) 的文本框。 (这是页面代码隐藏上的一个依赖属性)(可能值得一提:DataController 是一个单例,因此患者应该保持不变并且不会消失..)

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;是空的。有谁知道为什么这个绑定在导航后突然消失了?我真的不明白这怎么可能。

【问题讨论】:

    标签: wpf binding textbox


    【解决方案1】:

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

    【讨论】:

    • 非常感谢 Erno!这确实解决了问题!我是 WPF 新手,不知道 WPF 页面中有类似 KeepAlive 的东西。
    • 这解决了绑定问题。但是如果我不希望缓存是持久的(即确保有一个新页面)怎么办?文本框上的这个绑定泄漏问题很奇怪,因为我认为 RelayCommands 仍然有效......
    • @Goufalite - 这是一个不同的问题,应该单独发布。看看stackoverflow.com/questions/11654421/…
    【解决方案2】:

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

    另一个想法是,将TextBox.DataContext设置为Data,然后将文本设置为Patient.naam,这样调试起来会更容易,也可以高效地继承DataContext。

    【讨论】:

    • 问题在于改变的不是DataContext。绑定本身变成了一个空引用..
    • @StefK 我对 UserControl 也有同样的问题,你能分享一下解决方案吗?
    • @StefK VS 在我将 KeepAlive 标记添加到 UserControl 时显示错误。它说 UserControl 上没有 KeepAlive。
    • @fatihyildizhan 在页面对象上使用 KeepAlive
    • @MauricePheyton KeepAlive 对我不起作用。我仍然无法解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多