gpt4 book ai didi

c# - 在 WPF 窗口及其用户控件之间共享数据的最佳方式是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:51:36 24 4
gpt4 key购买 nike

WPF 有时会令人恼火。

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

在我的主窗口中,我有一个包含应用程序设置和一些其他应用程序范围数据的对象实例。我的几个选项卡需要访问此数据以进行数据绑定(bind)。我一直没能找到完成此任务的好方法。

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

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

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

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

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

最佳答案

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

在 XAML 中:

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

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

在代码中:

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

关于c# - 在 WPF 窗口及其用户控件之间共享数据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com