【问题标题】:WPF Databinding Singleton Properties (From Multiple Windows)WPF 数据绑定单例属性(来自多个窗口)
【发布时间】:2010-09-19 17:10:10
【问题描述】:

编辑 3:TLDR 版本

我有一个单例 DependencyObject,我将 UserControls 绑定到。一些用户控件在主窗口中,其中一些出现在单独的窗口(设置窗口)中。设置窗口中出现的没有正确绑定,不影响单例中的值。


我有一个单例DependencyObject 用于存储应用程序范围的设置。我还有一个设置对话框,用户(理论上)可以用来控制单例内部的值。

该应用程序主要处理文档,因此我需要能够存储许多不同项目的字体设置。所以我创建了一个名为 FontSettings 的 DependencyObject,它包含字体系列和字体大小等依赖属性。

对于我需要单独控制的项目的每个“部分”,都有一个不同的DependencyObject

因此,嵌套对象的整个结构如下所示:

MySettings
{
     PropertyGroup AProperties;
     PropertyGroup BProperties;
     PropertyGroup CProperties;
 }

 PropertyGroup
 {
      FontSettings FontStgs;
 }

每个PropertyGroup 都是一个不同的DependencyObject,但它们都将包含一个 FontSettings 对象。

所以,因为我知道我需要在很多地方显示 FontSettings 对象的设置控件,所以我创建了一个简单的 UserControl 来修改它们。我认为我可以简单地将 UserControl 的 DataContext 绑定到我希望它修改的 FontSettings 对象,因此,UserControl 中的更改将反映在 MySettings 对象中(UserControl 内部的控件是绑定到 FontSettings 的属性)。但是当我在 UserControl 的构造函数上设置断点时,初始化后 DataContext 始终为空。

如果这还不够清楚,无法提供帮助,请告诉我,我会发布实际代码。

这是设置窗口中我的 XAML 的 sn-p:

<local:FontSettingsControl DataContext="{Binding Source={x:Static stg:MySettings.Instance}, Path=PageHeaderSettings.CompanySettings}" />            

CompanySettings 属于 FontSettings 类型。

TLDR 版本: 我似乎无法让 DataContext 正确绑定。如果是这样,我认为控件会正确影响设置。

我需要将 DataContext 指向 CompanySettings DependencyObject。

CompanySettings 对象的完整路径是:MySettings.Instance.PageHeaderSettings.CompanySettings

设置单例:MySingleton

编辑:

在使用 Snoop 进行检查后,DataContext 似乎没有设置。我的绑定表达式有问题吗?

编辑 2:

看来我的问题是由于我尝试绑定的 UserControls 位于不是主窗口的窗口中。当我将 UserControl 放在主窗口中时,一切都按预期工作。那么,有谁知道问题实际上是由什么引起的(我认为它的根源在于线程)以及我应该如何继续使我的设置窗口功能?

【问题讨论】:

    标签: wpf binding user-controls singleton


    【解决方案1】:

    您真的在运行时遇到问题吗?通过检查构造函数中的值进行测试的方式不会告诉您任何事情,因为在控件完成初始化并加载之前,绑定中的值不会被设置。即使您在 XAML 中为控件的实例设置本地值而不是绑定,它也会在构造函数退出后发生(就像执行 new FontSettingsControl() { DataContext = myData }); 一样)。而是尝试使用 Snoop 在运行时检查您的 DataContext 值。

    【讨论】:

    • 首先出错的是UserControl(FontSettingsControl)有一个ComboBox,它绑定了一个名为FontSize的属性,但是当我更改ComboBox中的值时,MySettings中的对应值。 Instance.PageHeaderSettings.CompanySettings 对象没有得到更新。我去看看Snoop,看看能不能找到更精确的错误位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多