Wpf 附加属性未更新我的视图模型

Wpf 附加属性未更新我的视图模型,wpf,vb.net,xaml,mvvm,data-binding,Wpf,Vb.net,Xaml,Mvvm,Data Binding,我使用(Ray Burn的回答)中介绍的技术将我的RichTextBox绑定到我的视图模型(VM)的底层string-type属性。我面临的问题是,当用户在RichTextBox中键入内容时,即使在焦点更改之后,底层字段似乎也不会更新。下面是相关的XAML(SyntaxHighlighterTextBox是从RichTextBox继承的自定义控件): 编辑 以下是我的处理程序代码: Public Shared Sub MyHandler(obj As DependencyObject, e As

我使用(Ray Burn的回答)中介绍的技术将我的
RichTextBox
绑定到我的视图模型(VM)的底层
string
-type属性。我面临的问题是,当用户在
RichTextBox
中键入内容时,即使在焦点更改之后,底层字段似乎也不会更新。下面是相关的XAML(
SyntaxHighlighterTextBox
是从
RichTextBox
继承的自定义控件):

编辑 以下是我的处理程序代码:

Public Shared Sub MyHandler(obj As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim rtb = DirectCast(obj, SyntaxHighlighterTextBox)

    Dim xaml = GetDocumentXaml(rtb)
    Dim doc = New FlowDocument()
    range = New TextRange(doc.ContentStart, doc.ContentEnd)

    range.Load(New MemoryStream(Encoding.UTF8.GetBytes(xaml)), DataFormats.Text)

    rtb.Document = doc

    AddHandler range.Changed, Sub(obj2, e2)
                                If rtb.Document Is doc Then
                                  Dim buffer As New MemoryStream()
                                  range.Save(buffer, DataFormats.Text)
                                  SetDocumentXaml(rtb, Encoding.UTF8.GetString(buffer.ToArray()))
                                End If
                              End Sub
End Sub

您是否尝试指定绑定的模式?Mode=在您的应用程序中为单向源或双向源case@nkoniishvt:是的,所有这些。没有人能做到这一点。在DocumentXaml属性和callback@eranotzap:添加了回调代码。所以附加属性的类型是文档,而绑定到字符串属性的类型是ViewModel?
Public Property Query() As String
  Get
    Return mQuery
  End Get
  Set(ByVal value As String)
    mQuery = value
    RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Query"))
  End Set
End Property
Public Shared Sub MyHandler(obj As DependencyObject, e As DependencyPropertyChangedEventArgs)
    Dim rtb = DirectCast(obj, SyntaxHighlighterTextBox)

    Dim xaml = GetDocumentXaml(rtb)
    Dim doc = New FlowDocument()
    range = New TextRange(doc.ContentStart, doc.ContentEnd)

    range.Load(New MemoryStream(Encoding.UTF8.GetBytes(xaml)), DataFormats.Text)

    rtb.Document = doc

    AddHandler range.Changed, Sub(obj2, e2)
                                If rtb.Document Is doc Then
                                  Dim buffer As New MemoryStream()
                                  range.Save(buffer, DataFormats.Text)
                                  SetDocumentXaml(rtb, Encoding.UTF8.GetString(buffer.ToArray()))
                                End If
                              End Sub
End Sub