带有DataContext对象的WPF DataContext问题

带有DataContext对象的WPF DataContext问题,wpf,Wpf,我用datacontext创建了一个简单的示例。请从这里获取示例:我知道DataContext的用法是 如果用户更改了UI中的任何内容,则应在后端datacontext类中进行更新,而无需进行任何额外工作 若我们在后端datacontext对象中做了任何更改,那个么它应该在UI中更新,而不需要任何额外的工作 在我的样本中 如果我单击“单击”按钮,文本框值将更新。-通过 如果我单击“更新”按钮,文本框值将更新。-通过 如果我单击“清除”按钮,文本框值不会更新。-失败 单击“清除”按钮后,如果单击“

我用datacontext创建了一个简单的示例。请从这里获取示例:我知道DataContext的用法是

  • 如果用户更改了UI中的任何内容,则应在后端datacontext类中进行更新,而无需进行任何额外工作
  • 若我们在后端datacontext对象中做了任何更改,那个么它应该在UI中更新,而不需要任何额外的工作
  • 在我的样本中

  • 如果我单击“单击”按钮,文本框值将更新。-通过

  • 如果我单击“更新”按钮,文本框值将更新。-通过

  • 如果我单击“清除”按钮,文本框值不会更新。-失败

  • 单击“清除”按钮后,如果单击“单击”或“更新”按钮,则文本框值不会更新。-失败

  • 我做错什么了吗?如果是,我如何在构造函数中初始化文本框中的一些值,然后如果用户进行更改,则需要更新datacontext对象值。如果我在代码隐藏中更新任何值,则需要在UI中更新这些值。此外,如果我单击“清除”按钮,则需要清除所有文本框值。之后,如果用户再次输入值,则需要更新对象。我怎样才能做到呢?请帮忙


    注意:在我的示例中,我对一些行进行了注释。在这方面,我每次都将datacontext强制转换为模型类并对其进行更改。工作正常。我是否需要使用该方法在运行时更新值。UI中的更改值将不会在UI.< /P>> P>中更新。问题是,考虑变量Dc与DATACONTEX链接,但情况并非如此。要修复代码,只需在更改“dc”变量后再次设置DataContext

     private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            dc = new Journal();
            myPanel.DataContext = dc;
            //myPanel.DataContext = new Journal();
        }
    

    问题是,你认为变量“dc”链接到DATACONTHOST,但情况并非如此。要修复代码,只需在更改“dc”变量后再次设置DataContext

     private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            dc = new Journal();
            myPanel.DataContext = dc;
            //myPanel.DataContext = new Journal();
        }
    

    谢谢你的回答。这意味着我们需要在使用“new”关键字重新初始化对象时再次设置datacontext。对吧?对。也许更好的方法是评估为什么使用“new”关键字,而不是在viewmodel中创建“Reset”方法,并使用该方法重置对象。这样就不需要使用“new”。顺便说一句,如果我的回答解决了您描述的问题,请将其标记为解决方案,以便其他读者在遇到相同问题时可以使用。感谢您的回答。我只想补充一点,完全替换正在使用的数据上下文通常是个坏主意。它通常是可以工作的,但是在幕后有大量的开销,所有绑定都需要在模型和UI之间重新协商。正如@LupuSilviu所说,您最好使用viewmodel中的方法在内部重置数据,而不是构建一个全新的viewmodel。谢谢您的回答。这意味着我们需要在使用“new”关键字重新初始化对象时再次设置datacontext。对吧?对。也许更好的方法是评估为什么使用“new”关键字,而不是在viewmodel中创建“Reset”方法,并使用该方法重置对象。这样就不需要使用“new”。顺便说一句,如果我的回答解决了您描述的问题,请将其标记为解决方案,以便其他读者在遇到相同问题时可以使用。感谢您的回答。我只想补充一点,完全替换正在使用的数据上下文通常是个坏主意。它通常是可以工作的,但是在幕后有大量的开销,所有绑定都需要在模型和UI之间重新协商。正如@LupuSilviu所说,最好在viewmodel中使用一种方法在内部重置数据,而不是构建一个全新的viewmodel。