Я хочу включить элемент управления AvalonEdit TextEditor
в мое приложение MVVM. Первое, что мне нужно, это привязать свойство TextEditor.Text
, чтобы я мог отображать текст. Для этого я последовал и привел пример, приведенный в обеспечении совместимости AvalonEdit MVVM. Теперь я применил следующий класс, используя принятый ответ в качестве шаблона
public sealed class MvvmTextEditor : TextEditor, INotifyPropertyChanged
{
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(MvvmTextEditor),
new PropertyMetadata((obj, args) =>
{
MvvmTextEditor target = (MvvmTextEditor)obj;
target.Text = (string)args.NewValue;
})
);
public new string Text
{
get { return base.Text; }
set { base.Text = value; }
}
protected override void OnTextChanged(EventArgs e)
{
RaisePropertyChanged("Text");
base.OnTextChanged(e);
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string info)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Где XAML
<Controls:MvvmTextEditor HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
FontFamily="Consolas"
FontSize="9pt"
Margin="2,2"
Text="{Binding Text, NotifyOnSourceUpdated=True, Mode=TwoWay}"/>
Во-первых, это не работает. Связывание вообще не отображается в Snoop (не красное, а не что-то, на самом деле я даже не вижу свойство зависимости Text
).
Я видел этот вопрос, который точно такой же, как мой Двусторонняя привязка в AvalonEdit не работает, но принятый ответ не работает (по крайней мере, для меня). Поэтому мой вопрос:
Как выполнить двухстороннюю привязку с использованием вышеописанного метода и какова правильная реализация моего класса MvvmTextEditor
?
Спасибо за ваше время.
Примечание. У меня есть свойство Text
в моей модели ViewModel, и оно реализует требуемый интерфейс INotifyPropertyChanged
.