将可为空的布尔值从转换器返回到 XAML



我有一组三个单选按钮绑定到一个可为空的布尔值。我已经写了转换器,但我不确定如何写转换回来?当我打开窗口时,选择了该组的多个选项。

转换器类别:

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 是一个可为空的布尔值,定义为:

    public bool? GroupOneTestResult { get; set; }

  • XAML 中有三个单选按钮 - 通过、失败、未完成,作为一个组,我想将其绑定到 GroupOneTestResult(按钮 1、通过、绑定到 True。按钮二,失败,绑定到假。按钮三,未完成,绑定到空(

  • 在 XAML 中单击组中的按钮时,需要将正确的值存储在 GroupOneTestResult 中

  • 需要以编程方式更改 GroupOneTestResult (例如,加载测试结果时(,并且此值由自动选择的单选按钮反映。

  • 我有一个转换器类,在我的第一次尝试中,它将从 XAML 中获取转换器参数并获取正确的布尔值。这是行不通的。我不确定如何执行上述操作。

将组中的多个单选按钮绑定到单个属性需要在绑定转换器中进行特殊处理。

ConvertBack 方法只应在选中单选按钮时返回一个值,以避免自动取消选中其他单选按钮会产生任何进一步的影响。

除此之外,Convert 方法必须根据parameter字符串将传递的value与三个可能的值进行比较。

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;
}

最新更新