【发布时间】:2020-12-02 23:25:26
【问题描述】:
我正在尝试将自定义类绑定到我的 WPF 应用程序中的一组 3 个单选按钮。返回的类应该有三种可能性,具体取决于选择了组中的哪个按钮。所以即
public class RadioButtonResult
{
public bool Istrue {get; set;}
public string WhichOne {get; set;}
}
在按钮 1 返回的意义上应该绑定到 3 个单选按钮
new RadioButtonResult { Istrue = false, WhichOne = "First"}
第二个返回一个 Istrue = true 等的实例...我需要这个,因为有 3 种可能的情况,并且元素必须绑定到布尔属性和字符串属性。
我尝试使用转换器
public class RadioButtonConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (parameter)
{
case "First":
return new RadioButtonResult(false, "First");
case "Second":
return new RadioButtonResult(true, "Second");
case "Third":
return new RadioButtonResult(true, "First");
default:
return new RadioButtonResult(false, "None")
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{ return null; }
}
单选按钮本身应该没有文本,所以我不太确定如何传递转换器参数来尝试这个。 (我还没有尝试 ConvertBack,因为我无法让 Convert 工作)
<RadioButton GroupName="Group1" IsChecked="{Binding TestStatus, Converter=RadioButtonConverter, ConverterParameter="First"}"/>
我尝试了类似的方法,但它不接受文本作为参数。我怎样才能使这个转换器工作?
【问题讨论】:
-
为什么要转换器?您在这里不需要转换器。而是一个正确的视图模型,其属性返回
RadioButtonResult实例。 Here is an MVVM example 绑定到bool单选按钮属性对。 -
我需要大约 30 行相同的单选按钮,所以我想我需要一个。但是我使用转换器的主要原因是我不知道单选按钮在 WPF 中是如何工作的,而设计团队无论如何都想要它们。我的视图模型返回了实例,因为我之前使用复选框和组合框实现了它们,但现在它应该只是 3 个单选按钮。我不知道如何将字符串和布尔值绑定到一组 3 个单选按钮
-
“需要大约 30 行” - 然后你需要绑定到一个集合。见this answer。
-
嗯,是的,但在我解决这个问题之前,我仍然需要弄清楚如何将类绑定到单选按钮。如何将具有 3 种不同结果的 2 个属性绑定到一组单选按钮?
-
所以你想要的是一个返回一些结果的类。有逻辑取决于哪个单选按钮为真。你应该有几个带有文本的单选按钮,它们的输入用于从父类返回的逻辑中。对吗?
标签: c# wpf binding radio-button