Bind Xaml Radio button to boolean
wpf, xaml
Solution
You can bind a nullable boolean to your radio buttons, but you need to do it through a converter.
First declare your variable:
private bool? answer;
public bool? Answer
{
get { return answer; }
set
{
answer = value;
if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Answer"));
}
}
and initialise it to `null`.
Then in the 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>
And finally your converter:
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;
}
}
This binds the radio button to `Answer` and states that the first one will only be checked when the value is `true` and the second one will be checked when the answer is `false`. You can then check that `Answer` is not null before letting the user proceed.
Problem
I saw many posts on how to bind a boolean value to a radio button. But my scenario is that I need to bind it to a radio button and read the selection from the user. That is no option should be selected intially. If I bind it to a boolean, since boolean cant be null it shows the default value selected in radio button. If I use nullable boolean, I still defaults to false when trying to use the converter. I cant use oneway mode in xaml as I need to check if the radio button selection was made which I do using the bounded variable. Ant pointers on how to achieve this?