我正在编写一个基于向导的应用程序,在其中,我为每个步骤加载了不同的用户控件。加载的用户控件具有绑定到2个属性的单选按钮。当我尝试加载现有的用户控件时,单选按钮状态无法恢复。单选按钮绑定到的属性的值设置为false。
下面是视图和模型代码段
public bool Yes
{
get
{
return _yes;
}
set
{
_yes = value; // Value is set to false whenever the view is reloaded.
NotifyPropertyChanged(value.ToString());
}
}
public bool No
{
get
{
return _no;
}
set
{
_no = value;
Yes = !value;
//if (value)
//{
// Yes = !_no;
//}
}
}
查看:
<RadioButton x:Name="Yes" GroupName ="Check" Content="Yes" Margin="24,0,0,0" IsChecked="{Binding Yes, Mode=TwoWay}"/>
<RadioButton x:Name="No" GroupName ="Check" Content="No" Margin="24,0,0,0" IsChecked="{Binding No, Mode=TwoWay}"/>
想知道为什么以及如何将值设置为false吗?
答案 0 :(得分:1)
您在哪里“恢复”值?如果最初将Yes
或No
属性设置为true
,它应该可以工作。请参考以下示例代码,其中最初选择“是”:
private bool _yes = true;
public bool Yes
{
get
{
return _yes;
}
set
{
_yes = value; // Value is set to false whenever the view is reloaded.
_no = !value;
NotifyPropertyChanged("Yes");
}
}
private bool _no;
public bool No
{
get
{
return _no;
}
set
{
_no = value;
_yes = !value;
NotifyPropertyChanged("No");
}
}
答案 1 :(得分:0)
您可以使用单个属性以及可以用作逆变器的转换器:
private bool _IsYes;
public bool IsYes
{
get
{
return _IsYes;
}
set
{
_IsYes = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsYes"));
}
}
在这里 BooleanInverter :
public class BooleanInverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return false;
return !value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return false;
return !value;
}
}
XAML可能如下所示:
将逆变器添加为资源:
<Window.Resources>
<local:BooleanInverter x:Key="Inverter"/>
</Window.Resources>
并使用它:
<RadioButton Content="Yes" IsChecked="{Binding IsYes}"/>
<RadioButton Content="No" IsChecked="{Binding IsYes, Converter={StaticResource Inverter}}"/>