В настоящее время я пытаюсь преобразовать форму wpf с несколькими текстовыми полями в RichTextBoxes, чтобы улучшить функциональность редактирования.Все исходные текстовые поля были связаны с базовым классом хранения с использованием привязки данных к контексту данных при переходе на страницу.
public class Storage
{
public String IntroFormText { get; set; }
public String MainFormText { get; set; }
}
public partial class DataEntryPage : BasePage
{
private Storage _storage { get; set; }
public override NavigatingTo(object data, object savedState)
{
DataContext = _storage;
}
}
Первоначально привязки в текстовом поле просто проходили и связывались с хранилищем.Класс через контекст данных, например, так.
<TextBox
Name="IntroText"
Text="{Binding IntroFormText}
SpellCheck.IsEnabled="True" />
Это будет автоматически связываться через привязку данных к _storage.IntroFormText.Чтобы разрешить двухстороннее связывание данных в RichTextBoxes, была использована пользовательская реализация, основанная на идеях этой статьи.Проблемы возникают при попытке связать привязки данных со свойствами в классе Storage.В RichTextBoxes используется следующее объявление:
<Utils:BindableRichTextBox
x:Name="IntroductionText"
Document="{Binding {Path=IntroFormText, ElementName=dataEntryPage, Mode=TwoWay, Converter={StaticResource StringToXamlConverter}}"
SpellCheck.IsEnabled="True" />
Идея состоит в том, чтобы перегрузить методы получения и установки для соответствующего свойства, добавив следующие строки в класс DataEntryPage.
private static readonly DependencyProperty introProperty = DependencyProperty.Register("IntroFormText", typeof(string), typeof(Storage));
public string IntroFormText
{
get { return (string) GetValue(DocumentProperty); }
set { SetValue(DocumentProperty, value); }
}
Проблема, с которой я столкнулся, заключается в том, что свойство, с которым оно должно быть связано, находится в классе Storage, а НЕ в классе DataEntryPage.Есть ли способ заставить DependencyProperty эффективно связываться со свойствами класса Storage (как это делает TextBox автоматически), или мне придется написать какую-то взломанную совместную замену для этого поведения?Я предполагаю, что мне нужно перегрузить методы получения / установки для класса Storage.Properties внутри класса DataEntryPage, чтобы он мог правильно указывать на DependencyProperty?
Из-за особенностей системыУдаление системы привязки контекста данных, к сожалению, не является приемлемым вариантом (плюс у меня нет разрешения на серьезное изменение дизайна!).Надеюсь, что это может иметь смысл для тех, кто сталкивался с проблемой раньше!