[英]How to fire Property Changed with an Enum Property?
我有一個標准的Enum,可能為Yes或No:
public enum YesOrNo
{
Yes,
No
}
我的基本Model類具有YesOrNo屬性,如下所示:
public class Group : NotifyPropertyChanged
{
private YesOrNo groupOperator;
public YesOrNo GroupOperator
{
get
{
return this.groupOperator;
}
set
{
this.groupOperator = value;
OnPropertyChanged("GroupOperator");
}
}
在我的視圖中,我使用的是ToggleSwitch,類似於您在手機上看到的滑塊。 來回滑動應有效地重新分配Enum的值。 因此,它將默認設置為“是”,並且滑動切換開關會將“枚舉”值設置為“否”,或者將其設置為。
如果我有一種測試方法可以在按下Checked命令時重新分配Enum,則將觸發PropertyChanged事件,因此我知道這在技術上是可行的。 我只是想知道如何在Enum中交替使用值。
這是我的XAML中的ToggleButton:
<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保持使用枚舉而沒有任何開銷,並且視圖綁定也沒有任何開銷; 將此綁定操作工作留給轉換器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.