C# 将(双向)字符串绑定到包含内容的两个单选按钮
我想将字符串值True或False双向绑定到两个单选按钮,内容分别为True和False 条件 当使用select True单选按钮时,字符串值应为True,反之亦然(对于False单选按钮)。 一次只有一个单选按钮可选择为真或假。 有一个字符串列表,单选按钮是DataTemplate的一部分。 XAML 视图模型 模型库 用户界面 我几乎尝试了我所知道的一切,也检查了不同论坛和其他材料上的大部分相关链接 我想要的只是基于列表中用户选择的值True或FalseC# 将(双向)字符串绑定到包含内容的两个单选按钮,c#,wpf,xaml,data-binding,two-way-binding,C#,Wpf,Xaml,Data Binding,Two Way Binding,我想将字符串值True或False双向绑定到两个单选按钮,内容分别为True和False 条件 当使用select True单选按钮时,字符串值应为True,反之亦然(对于False单选按钮)。 一次只有一个单选按钮可选择为真或假。 有一个字符串列表,单选按钮是DataTemplate的一部分。 XAML 视图模型 模型库 用户界面 我几乎尝试了我所知道的一切,也检查了不同论坛和其他材料上的大部分相关链接 我想要的只是基于列表中用户选择的值True或False 提前感谢。我假设您的意思是将双向布
提前感谢。我假设您的意思是将双向布尔值绑定到两个单选按钮,而不是将双向字符串绑定到两个单选按钮,因为值的数据类型为bool 首先,不要使用数据触发器;移除它们 相反,在false按钮的绑定上,添加一个对布尔值求反的转换器:
<RadioButton x:Name="rbFalse" Content="False" IsChecked="{Binding Value,Mode=TwoWay,Converter={StaticResource NegateConverter}}"/>
使用单选按钮或复选框不是更简单吗?@Clemens我只需要使用单选按钮。谢谢你的帮助。你的转换代码真的帮助了我。我只想要这个,但不是为了绳子。我修改了它。
public partial class MainWindow : Window
{
MainViewModel viewModel;
public MainWindow()
{
InitializeComponent();
viewModel = new MainViewModel();
this.DataContext = viewModel;
}
}
public class MainViewModel : ModelBase
{
private List<MainModel> values;
public List<MainModel> Values
{
get
{
return values;
}
set
{
if (value != values)
{
values = value;
OnPropertyChanged("Values");
}
}
}
public MainViewModel()
{
Values = new List<MainModel>();
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
Values.Add(new MainModel() { Value = true });
else
Values.Add(new MainModel() { Value = false });
}
}
}
public class MainModel : ModelBase
{
private bool strValue;
public bool Value
{
get
{
return strValue;
}
set
{
if (value != strValue)
{
strValue = value;
OnPropertyChanged("Value");
}
}
}
}
public abstract class ModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
<RadioButton x:Name="rbFalse" Content="False" IsChecked="{Binding Value,Mode=TwoWay,Converter={StaticResource NegateConverter}}"/>
<local:NegateConverter x:Key="NegateConverter"/>
/// <summary>
/// This converter negates a boolean value.
/// </summary>
[ValueConversion(typeof(bool), typeof(bool))]
public class NegateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool bValue = false;
if (value is bool)
{
bValue = (bool)value;
}
return !bValue;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool bValue = false;
if (value is bool)
{
bValue = (bool)value;
}
return !bValue;
}
}