我正在开发基于 MVVM 模式的 WPF 应用程序。
我有一个 RichTextBox,如下所示:
<RichTextBox Name="HtmlRichTextBox">
<FlowDocument>
<Paragraph>
Some Test
</Paragraph>
</FlowDocument>
</RichTextBox>
和一个文本框:
<TextBox Text="{Binding ElementName=HtmlRichTextBox, Converter={StaticResource ResourceKey=RichTextBoxContentConverter}, Mode=OneWay}"/>
眼尖的人会注意到我正在使用 ValueConverter 将 RichTextBox 的内容转换为绑定到 TextBox 的 Text 属性的文本。ValueConverter 的代码在这里:
<ValueConversion(GetType(RichTextBox), GetType(String))> _
Public Class RichTextBoxContentConverter : Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim returnValue As String = String.Empty
If TryCast(value, RichTextBox) IsNot Nothing Then
Dim rtb As RichTextBox = CType(value, RichTextBox)
Dim rtbTextRange As New TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd)
If Not rtbTextRange.IsEmpty Then returnValue = rtbTextRange.Text
End If
Return returnValue
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
问题是第一次加载视图时正确设置了 TextBox Text 属性,但是对 RichTextBox 内容的任何后续更改都不会更新 TextBox。
如果我使用一个简单的示例,将一个 TextBox 的 Text 属性绑定到另一个可以正常工作的文本框,这表明可能是 ValueConverter 导致了问题。我假设在某个地方我没有通知目标源属性的更改,但我无法弄清楚我哪里出错了。
非常感谢您的帮助。