【发布时间】: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