c# - 从转换器返回一个可空的布尔值到 XAML
问题描述
我有一组三个单选按钮绑定到一个可为空的布尔值。我已经编写了转换器,但我不确定如何编写 ConvertBack?当我打开窗口时,选择了该组的多个选项。
转换器类:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
switch ((string)parameter)
{
case "Pass":
return true;
case "Fail":
return false;
case "NotComplete":
return null;
default:
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
switch ((bool?)value)
{
case true:
return "Pass";
case false:
return "Fail";
case null:
return "NotComplete";
default:
return "NotComplete";
}
}
XAML 中的单选按钮:
<RadioButton GroupName="GroupOneRadioButton" IsEnabled="{Binding CanPassGroupOneTest}" IsChecked="{Binding GroupOneTestResult, Converter={StaticResource radioButtonConverter}, ConverterParameter=Pass}" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
<RadioButton GroupName="GroupOneRadioButton" IsEnabled="{Binding CanPassGroupOneTest}" IsChecked="{Binding GroupOneTestResult, Converter={StaticResource radioButtonConverter}, ConverterParameter=Fail}" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" />
<RadioButton GroupName="GroupOneRadioButton" IsEnabled="{Binding CanPassGroupOneTest}" IsChecked="{Binding GroupOneTestResult, Converter={StaticResource radioButtonConverter}, ConverterParameter=NotComplete}" Grid.Row="1" Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" />
更多细节:
很抱歉一开始不清楚。希望这能解释:
GroupOneTestResult 是一个 Nullable 布尔值,定义为:
public bool? GroupOneTestResult { get; set; }
在 XAML 中有三个单选按钮 - Pass、Failed、Not Complete,作为一个组我想绑定到 GroupOneTestResult(按钮一,通过,绑定到 True。按钮二,失败,绑定到 false。按钮三,未完成,绑定到空)
当在 XAML 中单击组中的按钮时,需要在 GroupOneTestResult 中存储正确的值
GroupOneTestResult 需要以编程方式更改(例如,在加载测试结果时),并且此值由自动选择的 RadioButton 反映。
我有 Converter 类,在我的第一次尝试中,它将从 XAML 中获取 ConverterParameter 并获取正确的布尔值。这是行不通的。我不确定如何执行上述操作。
解决方案
将组中的多个 RadioButton 绑定到单个属性需要在 Binding Converter 中进行特殊处理。
ConvertBack 方法应仅在选中 RadioButton 时返回一个值,以避免自动取消选中其他按钮会产生任何进一步的影响。
除此之外,Convert 方法必须value
根据parameter
字符串将传递的值与三个可能的值进行比较。
public object Convert(
object value, Type targetType, object parameter, CultureInfo culture)
{
switch ((string)parameter)
{
case "Pass":
return (bool?)value == true;
case "Fail":
return (bool?)value == false;
default:
return (bool?)value == null;
}
}
public object ConvertBack(
object value, Type targetType, object parameter, CultureInfo culture)
{
if ((bool)value)
{
switch ((string)parameter)
{
case "Pass":
return (bool?)true;
case "Fail":
return (bool?)false;
default:
return (bool?)null;
}
}
return Binding.DoNothing;
}
推荐阅读
- c++ - 将 operator new(sizeof(T) * N) 返回的内存视为数组
- ios - 将 UITableView 添加到 UICollectionViewCell
- html - Bootstrap 4 导航栏品牌 - 是否可以在较小的断点处使用不同的徽标?
- python - 使用 Qt4 进行 Python 分散更新 - Qslider
- yii2 - 如何将sql命令转换为yii2
- apache-spark-sql - 如何从键值映射中提取值,火花数据框
- amp-html - 实现 amp 多页滑块
- sql - MSAccess 2013:联合 3 个表中的任何 2 个工作,联合所有 3 个崩溃
- c++ - map 在运行时选择 `std::greater` 或 `std::less`
- ruby-on-rails - Mongoid 和扩展 JSON