我看到很多关于如何将布尔值绑定到单选按钮的帖子。但我的情况是我需要将它绑定到一个单选按钮并读取用户的选择。
最初不应该选择任何选项。
如果我将它绑定到一个布尔值,因为布尔值不能为空,它会显示在单选按钮中选择的默认值。
如果我使用可为空的布尔值,我在尝试使用转换器时仍然默认为 false。
我不能在 xaml 中使用单向模式,因为我需要检查是否使用有界变量进行了单选按钮选择。
Ant指针如何实现呢?
您可以将可为空的布尔值绑定到单选按钮,但您需要通过转换器来完成。
首先声明你的变量:
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
并声明第一个将仅在值为 时检查,true
而第二个将在答案为时检查false
。Answer
然后,您可以在让用户继续之前检查它不为空。
这可能不是最好的方法,但您可以使用类似的方法: 复选框,如 radiobutton wpf c# ,只有两个控件。
我很欣赏这不是最好的,但阅读你的答案它会给你你想要的(通常)。