私はこの問題に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 は、Win32 アプリケーションの ElementHost 内に存在する WPF UserControl 内に存在します。
WPF UserControl の DataContext を DataView に設定しています。私は基本的に、データが DataView で更新されるたびに更新することを望んでおり、その逆ではありません。
ユーザーはそれを入力できますが、ユーザーが入力しているときにソースの明示的な更新は実行しません。
私の奇妙な問題は、アプリケーションの特定の場所で、このコントロールが正常に機能し、バインディングが完璧であることです。アプリケーションの他の場所では、DataView がそのデータを更新するときに、WPF UserControls の UI は更新されません。可能な限りトレースがあり、バインディング エラーはありません。したがって、WPF UserControls の DataContext は最新ですが、UI にはこれらの変更が反映されていません。
他に何を探すことができますか?バインドが DataView から切断される原因は何ですか?
ありがとう!!!
アップデート:
Damascus が指定した変更を使用しても、まだ機能しないなんて信じられません。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 (ハッシュ = 31836339): デタッチ
そのため、TextBox を UpdateSourceTrigger の明示モードを使用して双方向バインディングに戻しました。これはその警告を止めましたが、私はまだ奇妙な振る舞いをしています。
すべてここで説明: http://social.msdn.microsoft.com/forums/en-US/wpf/thread/3d092257-f5a9-4dc5-b9ee-ac1f0538df71/