什么可以导致WPF绑定中断(使用ADO.net)?

时间:2012-08-16 16:09:29

标签: wpf data-binding user-controls ado.net

我现在已经解决了这个问题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断开连接?

感谢!!!

UPDATE:

在使用大马士革指定的更改后,我无法相信它仍无效。在更新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):Detach

所以我将TextBox恢复为使用UpdateSourceTrigger的Explicit模式的双向绑定。这已经停止了这个警告,但我仍然得到了我的奇怪行为。

所有解释如下: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3d092257-f5a9-4dc5-b9ee-ac1f0538df71/

1 个答案:

答案 0 :(得分:0)

所以最后,我还没有找到解决方案。相反,我决定收听DataView ColumnChanged的{​​{1}}事件,并在目标DataTable控件上调用相应的BindingExpression.UpdateTarget()。这对我有用!