我现在已经解决了这个问题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 UserControl中,该控件存在于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天了:(
注意到一些新东西...我们正在某个地方。一旦我输入文本框,绑定似乎分离,我在输出窗口中收到此警告:
BindingExpression(hash = 31836339):Detach
所以我将TextBox恢复为使用UpdateSourceTrigger的Explicit模式的双向绑定。这已经停止了这个警告,但我仍然得到了我的奇怪行为。
所有解释如下: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3d092257-f5a9-4dc5-b9ee-ac1f0538df71/
答案 0 :(得分:0)
所以最后,我还没有找到解决方案。相反,我决定收听DataView ColumnChanged
的{{1}}事件,并在目标DataTable
控件上调用相应的BindingExpression.UpdateTarget()
。这对我有用!