Редактировать 3: TLDR-версия
У меня есть синглтон DependencyObject
, к которому я привязываю пользовательские элементы управления Некоторые из пользовательских элементов управления находятся в главном окне, некоторые из них отображаются в отдельном окне (окно настроек). Те, которые появляются в окне настроек, не связываются правильно и не влияют на значения в синглтоне.
У меня есть синглтон DependencyObject
, который я использую для хранения настроек всего приложения. У меня также есть диалоговое окно настроек, которое пользователь (теоретически) сможет использовать для управления значениями внутри синглтона.
Приложение в основном работает с документами, поэтому мне нужно иметь возможность сохранять настройки шрифта для ряда различных элементов. Поэтому я создал объект DependencyObject с именем FontSettings, он содержит свойства зависимостей для таких вещей, как семейство шрифтов и размер шрифта.
Для каждого «раздела» предметов, которые мне нужно контролировать отдельно, есть разные DependencyObject
.
Итак, вся структура вложенных объектов выглядит примерно так:
MySettings
{
PropertyGroup AProperties;
PropertyGroup BProperties;
PropertyGroup CProperties;
}
PropertyGroup
{
FontSettings FontStgs;
}
Каждый PropertyGroup
является отдельным DependencyObject
, но все они будут содержать объект FontSettings.
Итак, поскольку я знаю, что мне нужно будет отображать элементы управления настройками для объектов FontSettings во многих местах, я создал простой UserControl для их изменения. Я думал, что смогу просто привязать DataContext UserControl к объекту 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 указывал на объект DependencyObjectSettings.
Полный путь к объекту CompanySettings: MySettings.Instance.PageHeaderSettings.CompanySettings
Настройки синглтона: MySingleton
Edit:
После проверки с помощью Snoop кажется, что DataContext не устанавливается. Что-то не так с моим обязательным выражением?
Редактировать 2:
Кажется, моя проблема связана с тем, что пользовательские элементы управления, к которым я пытаюсь привязаться, находятся в окне, которое НЕ является главным окном. Когда я разместил UserControl в главном окне, все работало как положено. Итак, кто-нибудь знает, чем на самом деле вызвана проблема (я полагаю, что она имеет корни в потоке) и как мне выполнить функцию окна настроек?