0

だから私はこれを機能させるためにこの小さな問題を抱えています:

  1. 双方向バインディングのトライステート チェックボックスを備えたカスタム ユーザー コントロールを持つ Silverlight クライアント アプリがあります。
  2. ユーザーがチェックボックスの値を変更すると、プロパティの基礎となる関数が値を整数に変換します。

       -1 nothing
        0 false
        1 true
    
  3. ユーザーがダイアログ ボックスからデータを保存した後、すべてのデータ (複雑なオブジェクト) がシリアル化され、webservice に送信され、SQL db に格納されます。

  4. クライアントが Web サービスから保存されたデータをリクエストすると、そのオブジェクトが返されます。
  5. 次のように、返された逆シリアル化されたオブジェクト(EA)をチェックボックスにバインドしようとすると:

           With cC
               Dim b As New Binding("AllowedTo.Create")
               b.Source = EA
               b.Mode = BindingMode.TwoWay
               .SetBinding(CheckBox.IsCheckedProperty, b)
           End With
    

値が true または false の場合にのみ正常に機能しますが、チェックボックスがトライステートであるため、値が何もない場合は、マイナス記号 [-] でその 3 番目の状態 (未定義) に変わる必要がありますが、そうではありません。false の状態のままです - false のように、チェックなしで空です。

何が問題なのですか?

私の母国語ではない私の英語で申し訳ありません

4

2 に答える 2

1

これには整数を使用しないでください。Nullable Bool (Bool?) を使用してください。双方向バインディングはうまく機能し、次のように変換されます。

  • チェック == true
  • チェックなし == false
  • 不定 == null

シリアライゼーションは、null 可能な bool では問題になりません。実際、SQL フィールド値が NULL であるかどうかを確認する必要さえありません。これは有効な状態になるためです。また、SQL データベースで bool フィールドを使用すると、サイズも縮小されます。少し;)

データベースが設定されていて、それを変更できない場合は、バインディングのために整数を null 許容 bool に変換するコンバーターを記述します。2 分以上かかることはありません。

于 2012-05-08T15:01:38.113 に答える
0

このような手法は実際にはチェックボックスにネイティブであるため、そのブール値の 3 つの異なる状態を処理するカスタム コントロールを作成することをお勧めします。

于 2012-05-07T20:43:45.623 に答える