私はMVVMパターンに基づいたWPFアプリケーションに取り組んでいます。
私は次のようなRichTextBoxを持っています:
<RichTextBox Name="HtmlRichTextBox">
<FlowDocument>
<Paragraph>
Some Test
</Paragraph>
</FlowDocument>
</RichTextBox>
そしてTextBox:
<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プロパティを別のTextBoxにバインドする簡単な例を使用すると、問題の原因はおそらくValueConverterであることがわかります。どこかでソースプロパティの変更をターゲットに通知していないと思いますが、どこが間違っているのかわかりません。
助けてくれてありがとう。