gpt4 book ai didi

WPF MVVM - 绑定(bind)仅适用于初始值

转载 作者:行者123 更新时间:2023-12-03 10:53:41 28 4
gpt4 key购买 nike

我正在开发基于 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 的内容转换为绑定(bind)到 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

问题是第一次加载 View 时正确设置了 TextBox Text 属性,但是对 RichTextBox 内容的任何后续更改都不会更新 TextBox。

如果我使用一个简单的示例,将一个 TextBox 的 Text 属性绑定(bind)到另一个可以正常工作的文本框,这表明可能是 ValueConverter 导致了问题。我假设在某个地方我没有通知目标源属性的更改,但我无法弄清楚我哪里出错了。

非常感谢您的帮助。

最佳答案

您正在绑定(bind)到元素 HtmlRichTextBox ,而不是它的内容。由于该元素永远不会更改为不同的实例,因此它永远不会更新,并且您的转换器永远不会被调用。

为了获得您期望的行为,您需要绑定(bind)到它的内容而不是实际的元素(因为元素本身永远不会改变,只有它的内容会改变)。这实际上可能对 RichTextBox 有问题。控制,但有解决办法:见Richtextbox wpf binding .

关于WPF MVVM - 绑定(bind)仅适用于初始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757417/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com