簡體   English   中英

如何用枚舉屬性觸發更改的屬性?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM