我有一个标准的枚举,要么是"是",要么是"否":
public enum YesOrNo
{
Yes,
No
}
我的基本模型类有一个 YesOrNo 属性,如下所示:
public class Group : NotifyPropertyChanged
{
private YesOrNo groupOperator;
public YesOrNo GroupOperator
{
get
{
return this.groupOperator;
}
set
{
this.groupOperator = value;
OnPropertyChanged("GroupOperator");
}
}
在我看来,我使用的是切换开关,类似于您在手机上看到的滑块。来回滑动应该有效地重新分配枚举的值。因此,它将默认为"是",滑动切换会将"枚举"值设置为"否",或者。
如果我有一个测试方法,在点击"已检查"命令时重新分配枚举,则会触发 PropertyChanged 事件,因此我知道这在技术上是有效的。我只是想知道如何在枚举中交替使用值。
这是我的 XAML 中的切换按钮:
<ToggleButton Style="{StaticResource ToggleViewSwitch}" Command="{Binding SetOperatorCommand, UpdateSourceTrigger=PropertyChanged}" IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}"/>
这是我的主视图模型,我在其中持有命令和测试方法来手动分配值:
private bool isChecked = false;
public bool IsChecked
{
get
{
return this.isChecked;
}
set
{
this.isChecked = value;
OnPropertyChanged("IsChecked");
}
}
private RelayCommand setOperatorCommand;
public ICommand SetOperatorCommand
{
get
{
if (this.setOperatorCommand == null)
{
this.setOperatorCommand = new RelayCommand(
x => ToggleGroupOperator());
}
return this.setOperatorCommand;
}
}
private void ToggleGroupOperator()
{
if (IsChecked)
{
TopLevelGroup.GroupOperator = YesNo.No;
}
else
{
TopLevelGroup.GroupOperator = YesNo.Yes;
}
}
首先制作一个转换器...
public class YesOrNoToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
=> (value is YesOrNo yesOrNo && yesOrNo == YesOrNo.Yes) ? true : false;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
=> (value is bool isYes && isYes) ? YesOrNo.Yes : YesOrNo.No;
}
然后在绑定期间引用转换器...
<Window.Resources>
<Converters:YesOrNoToBooleanConverter x:Key="YesOrNoToBooleanConverter" />
</Window.Resources>
<Grid>
<CheckBox IsChecked="{Binding GroupOperator, Converter={StaticResource YesOrNoToBooleanConverter}}" />
</Grid>
这将允许您的 ViewModel 继续使用枚举而没有任何开销,并且视图可以在没有任何开销的情况下进行绑定;将此绑定操作工作留给转换器。