我已经解决这个问题3天了,我没有选择。不知道还能做什么。我有一个内部带有 TextBoxes 的 UserControl,所有定义都类似:
<TextBox x:Name="txtFreeFormat" Grid.Row="0" Grid.Column="1" TextWrapping="Wrap"
KeyUp="txtFreeFormat_KeyUp" PreviewKeyDown="txtFreeFormat_PreviewKeyDown" TextChanged="txtFreeFormat_TextChanged"
Text="{Binding [FREEFORMATADDRESSUI], Mode=OneWay, Converter={StaticResource FreeFormatOnlyConverter}, diag:PresentationTraceSources.TraceLevel=High}"
IsEnabled="{Binding Path=IsLocationEnabled, ElementName=LocationUserControl}"
IsReadOnly="{Binding Path=IsReadOnly, ElementName=LocationUserControl}"/>
此 TextBox 存在于 WPF 用户控件中,该控件存在于 Win32 应用程序的 ElementHost 中。
我将 WPF UserControl 的 DataContext 设置为 DataView。我基本上希望数据在 DataView 中更新时随时更新,反之亦然,因此我有一个 OneWay 绑定。
允许用户输入它,但是当用户输入时我不执行任何明确的源更新。
我奇怪的问题是应用程序中的某些地方,这个控件工作正常,绑定是完美的。应用程序中的其他地方,当 DataView 更新其数据时,WPF UserControls 的 UI 不会更新。我到处都有痕迹,并且没有绑定错误。因此 WPF UserControls 的 DataContext 是最新的,但 UI 并未反映这些更改。
我还能寻找什么?什么会导致绑定与 DataView 断开连接?
谢谢!!!
更新:
我不敢相信在使用大马士革指定的更改后它仍然无法正常工作。我什至在 DataView 更新后调用我自己的函数来重置绑定:
Public Sub RefreshBinding()
If WPFUserControl IsNot Nothing AndAlso WPFUserControl.DataContext IsNot Nothing Then
Dim dv As DataView = WPFUserControl.DataContext
WPFUserControl.DataContext = Nothing
WPFUserControl.DataContext = dv
End If
End Sub
我注意到此时转换器不再触发。当 DataContext = Nothing 时,字段也不会清除。
你现在可以明白我为什么坚持了 3 天了 :(
更新 2:
注意到一些新的东西......我们正在到达某个地方。一旦我在文本框中键入,绑定似乎分离,我在输出窗口中收到此警告:
BindingExpression (hash=31836339):分离
因此,我已将 TextBox 恢复为具有 UpdateSourceTrigger 显式模式的双向绑定。这已经停止了该警告,但我仍然有我的奇怪行为。
所有解释都在这里: http ://social.msdn.microsoft.com/forums/en-US/wpf/thread/3d092257-f5a9-4dc5-b9ee-ac1f0538df71/