【问题标题】:The name 'NotifyOfPropertyChange' does not exist in the current context当前上下文中不存在名称“NotifyOfPropertyChange”
【发布时间】:2014-06-06 08:35:15
【问题描述】:

我在以下代码中遇到错误:

public class PathSelectionPageViewModel : ObservableObject, INavigable, INotifyPropertyChanged
{
    private DriveInfo driveSelection;
    public DriveInfo DriveSelection_SelectionChanged
    {
        get
        {
            return driveSelection;
        }
        set
        {

            if (value == driveSelection) return;
            driveSelection = value;
            NotifyOfPropertyChange(() => DriveSelection_SelectionChanged);//must be implemented
        }

    }
}

我收到错误 NotifyOfPropertyChange Does not exists in current context。所有使用都可以;我检查了类似的问题,但没有找到答案。关于为什么找不到NotifyOfPropertyChange有什么建议吗?

【问题讨论】:

  • 嗯...您的项目中是否包含了对 Caliburn 的引用?
  • NotifyOfPropertyChange 在哪里实现?
  • @GayotFow 我想你找到了答案。我不知道这是来自外部库

标签: c# wpf visual-studio .net-assembly caliburn.micro


【解决方案1】:

在 Visual Studio“解决方案资源管理器”(通常在右窗格中)中,转到您正在使用此方法的项目,然后为“添加引用”打开上下文菜单。

当对话框出现时,导航到您的 Caliburn 程序集并选择 DLL。

然后返回发生编译器错误的项目并添加适当的“使用”语句,以便编译器可以找到它。

【讨论】:

    【解决方案2】:

    定义如下函数:

        private void RaisePropertyChanged(string propName)
        {
            if(PropertyChanged != null)
            {
                PropertyChanged(this,new PropertyChangedEventArgs(propName));
            }
        }
    

    然后使用

     set
        {
    
            if (value == driveSelection) return;
            driveSelection = value;
            RaisePropertyChanged("DriveSelection_SelectionChanged");
        }
    

    【讨论】:

    • 您为什么要告诉 OP 用不同的名称重新实现该方法?该方法在 Caliburn Micro 中定义。
    • 我认为使用NotifyOfPropertyChange 的意义在于不必维护一个反映属性名称的字符串
    • 你用谷歌搜索 NotifyOfPropertyChange 并看到它存在于 Caliburn 库中。然后,您阅读 cmets 并看到有人还强调了 OP 缺少参考的点。无论如何,这个答案是不正确的。
    • @Loetn 对不起,但你的推理是错误的。首先,他们说这就是问题所在。其次,该解决方案要求将方法名称作为字符串提供,这显然容易出现拼写错误并且不是类型安全的。这是一个错误的答案。
    • @GayotFow DanielKelley.. ..chill pals.. OP 正在明确实施 INotifyPropertyChanged ......这暗示我他没有使用 Calburn 并从某个地方复制了这段代码......所以是只是想帮助他......哇
    【解决方案3】:

    例如,我在您之前的问题中编写了它,它不是开箱即用的 :) 您必须自己编写或使用定义它的框架(例如 Caliburn.Micro)。更简单的变体:

     public class PathSelectionPageViewModel : ObservableObject, INavigable, INotifyPropertyChanged
    {
        private DriveInfo driveSelection;
        public DriveInfo DriveSelection_SelectionChanged
        {
            get
            {
                return driveSelection;
            }
            set
            {
    
                if (value == driveSelection) return;
                driveSelection = value;
                NotifyOfPropertyChange("DriveSelection_SelectionChanged");
            }
    
        }
    
         public event PropertyChangedEventHandler PropertyChanged;
    
            private void NotifyPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    }
    

    【讨论】:

    • 哇,这个问题让我因为拒绝差的答案而付出了代价! -1 用于忽略实际错误并提供较差的解决方案。
    猜你喜欢
    • 2013-10-02
    • 2014-04-22
    • 2017-06-17
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2020-11-02
    相关资源
    最近更新 更多