编辑3:TLDR版本
我有一个单独的DependencyObject
,我正在绑定UserControls。某些UserControl位于主窗口中,其中一些显示在单独的窗口(设置窗口)中。出现在设置窗口中的那些不正确绑定,不会影响单例中的值。
我有一个单身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在初始化后始终为null。
如果这个不够明确有用,请告诉我,我会发布实际代码。
以下是我在设置窗口中的XAML片段:
<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放在主窗口时,一切都按预期工作。那么,有没有人知道问题实际上是由什么造成的(我假设它的根源是线程)以及我应该如何继续设置窗口功能?
答案 0 :(得分:0)
您是否真的在运行时遇到问题?通过检查构造函数中的值进行测试的方式不会告诉您任何事情,因为Bindings中的值在控件完成初始化并加载之后才会设置。即使您在XAML中的控件实例上设置了本地值而不是Binding,它也会在构造函数退出后发生(就像执行new FontSettingsControl() { DataContext = myData });
一样)。而是尝试使用Snoop在运行时检查DataContext值。