2013-08-26 25 views
5

ブール値をラジオボタンにバインドする方法については、多くの記事があります。しかし、私のシナリオでは、ラジオボタンにバインドして、ユーザーからの選択を読み込む必要があるということです。Xamlラジオボタンをブール値にバインド

これはオプションが選択されていないことを意味します。

ブール値にnullをバインドすると、ラジオボタンで選択されたデフォルト値が表示されます。

ヌル値ブール値を使用すると、コンバーターを使用しようとすると、デフォルトでfalseになります。

制限付き変数を使用してラジオボタンの選択が行われたかどうかを確認する必要があるため、xamlには1ウェイモードを使用できません。

これを達成するためのAntポインタ

+0

ラジオボタンにバインドしたいのはなぜですか?チェックボックスは良くないでしょうか? – ChrisF

+0

私はチェックボックスを考えたが、それは私に同じprobを与えるだろうか? selectedvalueはブール値にバインドされており、コンバーターには同じ問題がありますか? –

+0

いいえブール値が偽の場合、チェックボックスは空です。真の場合はチェックされます。また、それをヌル可能なブール値にバインドして、それをチェックボックスの3番目の不確定な状態にすることもできます。ここで何を達成しようとしていますか?このブール値は何を表していますか? – ChrisF

答えて

5

null可のブール値をラジオボタンにバインドすることはできますが、コンバーターを使用して行う必要があります。

まず、あなたの変数を宣言:

private bool? answer; 
public bool? Answer 
{ 
    get { return answer; } 
    set 
    { 
     answer = value; 
     if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Answer")); 
    } 
} 

nullにそれを初期化します。

はその後XAMLで:

<Window.Resources> 
    <local:BooleanConverter x:Key="BooleanConverter"/> 
</Window.Resources> 

<StackPanel Grid.Row="1"> 
    <RadioButton Content="I Agree" 
       IsChecked="{Binding Answer, 
          Converter={StaticResource BooleanConverter}, 
          ConverterParameter='true', Mode=TwoWay}" /> 
    <RadioButton Content="I Disagree" 
       IsChecked="{Binding Answer, 
          Converter={StaticResource BooleanConverter}, 
          ConverterParameter='false', Mode=TwoWay}" /> 
</StackPanel> 

そして最後に、あなたのコンバータ:

class BooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var test = (bool?)value; 
     var result = bool.Parse((string)parameter); 

     if (test == result) 
     { 
      return true; 
     } 

     return false; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var result = bool.Parse((string)parameter); 
     return result; 
    } 
} 

これはAnswerにあるラジオボタンを結合し、値があるとき、最初の1のみがチェックされると述べてtrue 2番目の回答は答えがfalseのときにチェックされます。その後、ユーザに進む前にAnswerがヌルでないことを確認することができます。

+0

ありがとうございます。しかし、私の見解が読み込まれる前に何らかの理由でブール値がfalseに設定されています。私はそれがコンバータのせいだと思った。何が起きているのかを確認して戻ってください。 –

+1

@ashishg - コンストラクタでnullableブール値を 'null'に明示的に設定してください。 – ChrisF

+0

これは..問題は、別の場所で定義された他のものと同じ変数名を使用していたが、ここで、ビューがロードされるたびに更新されていたということでした。 –

0

これはそれを行うための最善の方法ではないかもしれないが、あなたはこれに似た何かを使用することができます checkbox like radiobutton wpf c# を、ちょうど2つのコントロールを持っています。

私はそれが最高ではないことを感謝しますが、あなたの答えを読んで、あなたが望むもの(一般的に)を与えます。

+0

私はチェック/チェックを外してイベントをトリガーすることを考えましたが、それは良い解決策ではないと思っていました。そして、もっと良い方法があるかどうかをここに掲載しました –

関連する問題