4

私は xaml TabControl を持っています。1 つのページには、隣接する ListView の選択された値の異なるプロパティにそれぞれバインドされた 3 つの RadioButtons があります。ListView で選択した項目を切り替えた後、ラジオ ボタンがバインドされていることを忘れて更新されないようです。

デバッガーでそれを見て、新しく選択した項目に切り替えると、非ユーザー コードが最初に 3 つのプロパティすべての値をチェックし、次に最初の 2 つだけ、最終的には最初の 1 つだけを確認します。ただし、タブを変更して元に戻すと、さらにいくつかの用途が得られるようです。

バインディング自体はかなり簡単です。Bool プロパティの IsChecked への TwoWay バインディング。深さは 4 レベル (Path=DataModel.Selected.AB) ですが、同じ深さで正常に動作する他のものがあります。

これは人々が聞いたことのあることで、何が起こっているのか知っていますか? または、バインディングが何らかの形で忘れられている場合、xaml を明示的に思い出させる方法はありますか?

4

3 に答える 3

8

次のようにバインディングを手動で更新することができます。

TestCheckBox
    .GetBindingExpression(CheckBox.IsCheckedProperty)
    .UpdateTarget();

そうは言っても、これが根本的な問題を修正するという 100% の自信はありません。以前は WPF バインディングでこの種の問題は発生していませんでしたが、タブ コントロールでいくつかの奇妙な問題が発生しました。

于 2009-03-18T00:51:32.453 に答える
6

これは明らかに既知の問題の一部です。

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8eb8280a-19c4-4502-8260-f74633a9e2f2/

つまり、RadioButton(.Net 3.5sp1経由)は、他のボタンのチェックを外そうとしているときにチェックされたときに、他のRadioButtonのバインディングを何らかの形で強制終了します。簡単な修正(読み取り:ハック)は、各ラジオボタンに異なるGroupNameを割り当てて、互いに混乱させないようにすることです。

于 2009-03-18T01:33:25.847 に答える
1

この問題を解決する別の方法は、ListBox 内のプロパティのリストを偽造し、ListBoxItem テンプレートをラジオボタンにすることです。

于 2009-03-18T02:10:39.847 に答える