c# – 在WPF窗口和用户控件之间共享数据的最佳方法是什么?

WPF有时会令人愤怒.

我有一个相当简单的应用程序,它包含一个主窗口,其中包含一个选项卡控件和几个选项卡.我不喜欢在同一个文件中使用所有选项卡的代码的想法,所以我使用this question的答案将每个选项卡分成单独的用户控件.

在我的主窗口中,我有一个包含应用程序设置的对象实例,以及一些其他应用程序范围的数据.我的一些标签需要访问此数据以进行数据绑定.我无法找到实现这一目标的好方法.

首先,我尝试访问控件Loaded事件中的父窗口,并在主窗口中获取对公开设置对象的属性的引用,如下面的代码所示.除了Loaded事件之外,每次选项卡获得焦点时都会触发此类工作.此外,此事件发生在控件生命周期的后期,因此我无法在用户控件XAML中绑定到此对象中的任何属性.

private void MyUserControl_Loaded(object sender, RoutedEventArgs e)
{
    this.ApplicationSettings = ((MainWindow)Window.GetWindow(this)).ApplicationSettings;
}

然后我尝试将数据传递给用户控件构造函数,但是在XAML中无法做到这一点.

鉴于这些是应用程序范围的设置,我可以使ApplicationSettings类单例并在任何地方引用它,但我不希望这样做以进行单元测试.

那么如何才能实现这样的目标呢?我的方法是否存在根本缺陷?在我看来,所有这些UI元素都是同一窗口的一部分,因此应该能够从主窗口访问数据,但对象模型似乎不允许这样做.


最佳答案

扫描二维码关注公众号,回复: 10673459 查看本文章

您可以将设置对象放入包装类中的静态属性(此示例中为SettingsHolder,并通过应用程序引用它

在XAML中:

{Binding SettingName, Source={x:Static local:SettingsHolder.Settings}}

local是您的SettingsHolder类所在的命名空间.

代码:

var x = SettingsHolder.Settings.SettingName;
SettingsHolder.Settings.SettingName = x;

https://codeday.me/bug/20190328/783766.html 

发布了18 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_28368039/article/details/88885352