1

我已经解决这个问题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/

4

1 回答 1

0

所以最后,我还没有找到解决办法。相反,我决定监听ColumnChangedDataView 的事件DataTable并调用BindingExpression.UpdateTarget()目标TextBox控件上的相应事件。这对我有用!

于 2012-08-17T15:01:46.510 回答