2012-05-07 5 views
0

だから私はこの小さな問題これが動作することがあります。Silverlightのトライステートチェックボックスのデータバインディングは、値を計算するプロパティをオブジェクトに

  1. 私はSilverlightのクライアントアプリを持っている双方向結合と、トライステートチェックボックスを使用してカスタムユーザーコントロールを持っています

    ユーザ後
    -1 nothing 
        0 false 
        1 true 
    
  2. ダイアログボックスからのデータを保存し、すべてのデータを(:

  3. ユーザがチェックボックスの値を変更した後は、プロパティの基礎となる機能は、整数に値を変換します複雑なオブジェクト)がシリアル化され、Webサービスに送信され、SQLデータベースに格納されます。私はこのようなチェックボックスに戻って非直列化されたオブジェクト(EA)を返されるバインドしようとすると、クライアントの要求はバックWebサービスからのデータを保存した

  4. 、それはOK
  5. オブジェクトという取り戻す:

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

値が真または偽の場合は正常に機能しますが、値が何もない場合、チェックボックスはトライステートなので、未定義のマイナス記号[ - ]が付いた3番目の状態になります。 それは偽の状態のままです - チェックなしの空です(偽のようです)。

何が問題なのですか?

私の英語、そのない私の母言語のため申し訳ありません

答えて

1

整数を使用しないでください。Nullable Bool(Bool?)を使用してください。双方向バインディング作品だけでなく、それが変換されます。

  • チェック==真
  • 未確認== falseを
  • 不定== nullの

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

データベースはあなたはそれを変更することはできません、あなたの整数をバインディングのnull可能なブールに変換するコンバータを書く、2分以上かかるべきではありません。

+0

私はすでに "AllowedTo.Create"というプロパティを持っていると言っていませんでした。魔女はnullable(boolean型)です。この値をこの整数プロパティから前後に変換します。しかし、何も返されないときは、チェックボックスは不確定に表示されますが、チェックされていない状態のままです。私のプロパティがtrueまたはfalseを返す場合、それは正常に動作します – halloweenlv

+0

1)プロパティはコンバーターではありません...バインディングで値を変換するためにコンバーターを使用してください。 – cosinus

+0

2)あなたが言ったように "NOTHING"を返すことはできません、それは値を返すことができますか、または値をnullにすることができますが、何もないです – cosinus

0

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

関連する問題