【发布时间】:2019-12-11 11:55:12
【问题描述】:
我有一组三个单选按钮绑定到一个可为空的布尔值。我已经编写了转换器,但我不确定如何编写 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。按钮三,Not Complete,绑定到null)
当在XAML中点击组中的按钮时,需要在GroupOneTestResult中存储正确的值
GroupOneTestResult 需要以编程方式更改(例如,在加载测试结果时),并且该值由自动选择的 RadioButton 反映。
我有一个 Converter 类,在我的第一次尝试中,它会从 XAML 中获取 ConverterParameter 并获取正确的布尔值。这是行不通的。我不确定如何执行上述操作。
【问题讨论】:
-
Convert 方法根本不转换 Binding 的源属性的值。假设
GroupOneTestResult返回适当的字符串,将switch ((string)parameter)更改为switch ((string)value)。并从所有 Bindings 中删除 ConverterParameter 设置。 -
那我是不是搞错了?我希望 bool 为 True、False 或 Null,具体取决于选择的单选按钮分别为 Passed、Failed 或 Not Completed。然而,ViewModel 中的一些代码也需要能够更新单选按钮(因此,如果加载了结果,例如,选择了正确的单选按钮)
-
对不起,如果我有错误的想法;我对此还是很陌生
-
如前所述,如果
GroupOneTestResult属性会返回这些字符串(我们不知道,因为您没有告诉我们),那么 Convert 方法应该打开value,而不是 @987654329 @,并且根本不应该有 ConverterParameter。 ConvertBack 应该可以正常工作。 -
抱歉,您的问题需要更多细节。 GroupOneTestResult 属性到底是什么?它是如何声明的? RadioButton 应该做什么?
标签: c# .net wpf data-binding