【问题标题】:INotifyPropertyChanged with an Enum带有枚举的 INotifyPropertyChanged
【发布时间】:2014-05-19 19:26:17
【问题描述】:

还是 C# 和 WPF 的新手,我想使用 Enum,但我不知道如何将它与 OnPropertyChanged 一起使用

public enum _status
{
    AuthRequired, AuthAttempted, AuthReceived, AuthError, AuthSuccessful
}

这不起作用:

public enum AuthStatus
{
  get { return _status; }
  set { ..... }
}

我知道解决方案会很简单,但是当我在 google 上查看时我没有找到任何东西......有什么帮助吗?

【问题讨论】:

  • 解决方法并不简单。枚举与否都是一样的——因为 INotifyPropertyChanged 根本不关心属性的内容。它发布属性的名称,而不是内容。因此,请阅读任何教程和一本书并完成它们。并且 INotifyPropertyChanged 不是 WPF 的东西 - 它是核心 .NET。
  • 忘记枚举。你将如何实现其他类型?完全一样的方式..
  • 几乎我只是想用它来跟踪我正在做的事情的状态。比如第一步,第二步等。然后我想使用那个属性设置 WPF 数据触发器更改以更改标签或其他内容。无论如何,这些都是我最初的想法

标签: c# wpf enums inotifypropertychanged


【解决方案1】:

这根本行不通。

问题的一部分是enum,根据定义,不能设置值,并且对于枚举的正常使用,你永远不会想要。这就是枚举的工作原理。

现在,如果您的模型或视图模型中的 property 是枚举类型,您可以轻松地将其声明为属性并像使用任何其他类型一样引发属性更改。

private Status _status
public enum Status
{
    AuthRequired, AuthAttempted, AuthReceived, AuthError, AuthSuccessful
}

public Status Status
{
    get { return _status; }
    set
    {
        _status = value;
        RaisePropertyChanged("Status");
    }
}

【讨论】:

  • 感谢您的解释。这很有意义,并且会使用不同的数据类型。
  • 很高兴为您提供帮助。当您对自己的答案感到满意时,不要忘记标记已接受的答案!
  • 直到5分钟才让你=P
  • 嗯,这很有趣。 ThingsLearnedToday++;
【解决方案2】:

您不能将enum 声明为属性。您的代码必须是:

private _status _myStatus;
public _status AuthStatus
{
  get { return _myStatus; }
  set 
  { 
     _myStatus = value;
     NotifyPropertyChanged("AuthStatus")
  }
}

编写public enum _status 声明了一个名为_status 的新类型(请注意,这不是一个很好的类型名称,因为它看起来像一个私有数据成员)。然后,您需要声明一个此类型的属性和字段,然后您可以在其上运行 NotifyPropertyChanged。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多