有时候WPF会让人很恼火。
我有一个相当简单的应用程序,它由一个包含选项卡控件和几个选项卡的主窗口组成。我不喜欢在同一个文件中编写所有选项卡的代码,因此我使用了这个问题的答案,将每个选项卡拆分为单独的用户控件。
在我的主窗口中,我有一个包含应用程序设置和其他应用程序范围数据的对象实例。我的一些选项卡需要访问此数据以进行数据绑定。我一直没有找到一个好的方法来实现这一点。
首先,我尝试在控件的Loaded事件中访问父窗口,并获取主窗口中公开设置对象属性的引用,如下面的代码所示。这种方法有点可行,但是Loaded事件在每次选项卡获得焦点时都会触发。此外,该事件发生在控件生命周期的晚期,因此我无法在用户控件的XAML中绑定该对象的任何属性。
private void MyUserControl_Loaded(object sender, RoutedEventArgs e)
{
this.ApplicationSettings = ((MainWindow)Window.GetWindow(this)).ApplicationSettings;
}
我尝试将数据传递到用户控件的构造函数中,但是在XAML中没有办法这样做。
考虑到这些是应用程序范围内的设置,我可以将ApplicationSettings类作为单例并在所有地方引用它,但出于单元测试目的,我不想这样做。
那么如何实现这样的操作呢?我的方法是否根本存在缺陷?在我看来,所有这些UI元素都是同一个窗口的一部分,因此应该能够访问主窗口中的数据,但是对象模型似乎不允许这样做。
var myInstance = (BindingObjectClass) this.DataContext
,你就可以从 myInstance 变量中访问该对象!希望这能在将来的某个时候有所帮助! - Kevek