我想将一个字符串值(“ True”或“ False”)绑定(双向)到具有“ True”和“ False”内容的两个单选按钮。
条件
XAML
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ListBox ItemsSource="{Binding Values}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton x:Name="rbTrue" Content="True" IsChecked="{Binding Value,Mode=TwoWay}" />
<RadioButton x:Name="rbFalse" Content="False" IsChecked="{Binding Value,Mode=TwoWay}"/>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=Value,Mode=TwoWay}" Value="True">
<Setter Property="IsChecked" TargetName="rbTrue" Value="True"/>
<Setter Property="IsChecked" TargetName="rbFalse" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Value,Mode=TwoWay}" Value="False">
<Setter Property="IsChecked" TargetName="rbTrue" Value="False"/>
<Setter Property="IsChecked" TargetName="rbFalse" Value="True"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
XAML.CS
public partial class MainWindow : Window
{
MainViewModel viewModel;
public MainWindow()
{
InitializeComponent();
viewModel = new MainViewModel();
this.DataContext = viewModel;
}
}
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");
}
}
}
}
MODELBASE
public abstract class ModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
UI
我几乎尝试了我所知道的一切,并且还在不同的论坛和其他材料上在线检查了大多数相对链接。
根据列表中的用户选择,我想要的只是“ True”或“ False”值。
谢谢。
答案 0 :(得分:1)
我假设您的意思是“将(TwoWay) Boolean 值绑定到两个单选按钮”,而不是“将(TwoWay) string 绑定到两个单选按钮”,因为{ {1}}的数据类型为Value
。
首先,不要使用bool
;删除它们。
相反,在“假”按钮的绑定上,添加一个否定布尔值的转换器:
DataTrigger
在XAML资源中,您需要定义转换器:
<RadioButton x:Name="rbFalse" Content="False" IsChecked="{Binding Value,Mode=TwoWay,Converter={StaticResource NegateConverter}}"/>
用您在其中定义<local:NegateConverter x:Key="NegateConverter"/>
类的任何命名空间替换local
。
这是转换器的代码:
NegateConverter