Привязка к Run.TextProperty возвращается к старому значению после изменения текста - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь создать RichTextBox с Run объектом внутри, у которого есть свойство Text, привязанное к строковому свойству в моем собственном объекте.Вот как я создаю привязку:

Paragraph paragraph = new Paragraph();
Run run = new Run();
Binding bodyBinding = new Binding("Body");
PresentationTraceSources.SetTraceLevel(bodyBinding, PresentationTraceLevel.High);
bodyBinding.Source = OpenedFiles[index];
bodyBinding.Mode = BindingMode.TwoWay;
bodyBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
run.SetBinding(Run.TextProperty, bodyBinding);

paragraph.Inlines.Add(run);
FlowDocument flowDocument = new FlowDocument(paragraph);
RichTextBox rtb = new RichTextBox(flowDocument);

Это отладочная информация при создании привязки:

System.Windows.Data Warning: 56  : Created BindingExpression (hash=27037160) for Binding (hash=32830290)
System.Windows.Data Warning: 58  : Path: 'Body'
System.Windows.Data Warning: 62  : BindingExpression (hash=27037160): Attach to System.Windows.Documents.Run.Text (hash=42007851)
System.Windows.Data Warning: 67  : BindingExpression (hash=27037160): Resolving source 
System.Windows.Data Warning: 70  : BindingExpression (hash=27037160): Found data context element: <null> (OK)
System.Windows.Data Warning: 78  : BindingExpression (hash=27037160): Activate with root item OpenedFile (hash=42526340)
System.Windows.Data Warning: 108 : BindingExpression (hash=27037160):   At level 0 - for OpenedFile.Body found accessor RuntimePropertyInfo(Body)
System.Windows.Data Warning: 104 : BindingExpression (hash=27037160): Replace item at level 0 with OpenedFile (hash=42526340), using accessor RuntimePropertyInfo(Body)
System.Windows.Data Warning: 101 : BindingExpression (hash=27037160): GetValue at level 0 from OpenedFile (hash=42526340) using RuntimePropertyInfo(Body): 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 80  : BindingExpression (hash=27037160): TransferValue - got raw value 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 89  : BindingExpression (hash=27037160): TransferValue - using final value 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'

А вот так выглядит класс OpenedFile:

public class OpenedFile : INotifyPropertyChanged
{
    //Implementation of INotifyPropertyChanged interface 
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private string _name;
    private string _body;
    private string _prevbody;
    private string _path;
    private bool _modified;

    public string Name { get { return _name; } set { _name = value; NotifyPropertyChanged();} }
    public string Body {
        get { return _body; }
        set {
                _body = value;
                NotifyPropertyChanged();
            }
    }
    public string Path { get { return _path; } set { _path = value; NotifyPropertyChanged();} }
    public bool Modified { get { return _modified; } set { _modified = value; NotifyPropertyChanged(); } }
    public OpenedFile(string name, string body, string path)
    {
        Name = name;
        Body = body;
        Path = path;
        Modified = false;
    }

    public OpenedFile()
    {
        Name = "New File";
        Body = "";
        Path = "";
        Modified = true;
    }
}

Сначала эта привязка работает (RichTextBox отображает правильное содержимое файла при его создании), но как только я набираю что-то в RichTextBox, он дает мне следующую информацию (в этом примере я набрал 'x'в конце RichTextBox):

System.Windows.Data Warning: 90  : BindingExpression (hash=27037160): Update - got raw value 'nikjodfewsanioudawnuidwanuidwniuainudwsodfx'
System.Windows.Data Warning: 94  : BindingExpression (hash=27037160): Update - using final value 'nikjodfewsanioudawnuidwanuidwniuainudwsodfx'
System.Windows.Data Warning: 102 : BindingExpression (hash=27037160): SetValue at level 0 to OpenedFile (hash=42526340) using RuntimePropertyInfo(Body): 'nikjodfewsanioudawnuidwanuidwniuainudwsodfx'
System.Windows.Data Warning: 95  : BindingExpression (hash=27037160): Got PropertyChanged event from OpenedFile (hash=42526340)
System.Windows.Data Warning: 101 : BindingExpression (hash=27037160): GetValue at level 0 from OpenedFile (hash=42526340) using RuntimePropertyInfo(Body): 'nikjodfewsanioudawnuidwanuidwniuainudwsodfx'
System.Windows.Data Warning: 80  : BindingExpression (hash=27037160): TransferValue - got raw value 'nikjodfewsanioudawnuidwanuidwniuainudwsodfx'
System.Windows.Data Warning: 89  : BindingExpression (hash=27037160): TransferValue - using final value 'nikjodfewsanioudawnuidwanuidwniuainudwsodfx'
System.Windows.Data Warning: 90  : BindingExpression (hash=27037160): Update - got raw value 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 94  : BindingExpression (hash=27037160): Update - using final value 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 102 : BindingExpression (hash=27037160): SetValue at level 0 to OpenedFile (hash=42526340) using RuntimePropertyInfo(Body): 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 95  : BindingExpression (hash=27037160): Got PropertyChanged event from OpenedFile (hash=42526340)
System.Windows.Data Warning: 101 : BindingExpression (hash=27037160): GetValue at level 0 from OpenedFile (hash=42526340) using RuntimePropertyInfo(Body): 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 80  : BindingExpression (hash=27037160): TransferValue - got raw value 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'
System.Windows.Data Warning: 89  : BindingExpression (hash=27037160): TransferValue - using final value 'nikjodfewsanioudawnuidwanuidwniuainudwsodf'

Итак, сначала он корректно фиксирует изменение и обновляет его, но затем возвращает его к старому значению.Более того, после этого Binding полностью разрушается - он не обновляется при любом вводе текста, но также не отображает информацию при отладке.

Кто-нибудь знает, как это исправить?Пожалуйста, я в отчаянии на данный момент, я пытался отладить его в течение нескольких часов.Я попытался удалить реализацию INotifyPropertyChanged из класса OpenedFile и установить привязку в другой режим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...