【问题标题】:How can I OnPropertyChanged of BindableBase without the optional parameter?如果没有可选参数,我如何 OnPropertyChanged 的​​ BindableBase?
【发布时间】:2016-12-02 01:40:59
【问题描述】:

OnPropertyChanged 的文档中,MSDN 提到了 propertyName 参数:

用于通知侦听器的属性名称。该值是可选的,可以在从支持CallerMemberNameAttribute 的编译器调用时自动提供。

现在我很确定我的编译器支持CallerMemberNameAttribute,因为它在我们代码库的其他地方使用。但是,当我尝试在没有此参数的情况下调用它时会出错。

“OnPropertyChanged”方法的无重载需要 0 个参数。

我是否遗漏了什么,或者这可能是 Prism 中的错误?

如果有帮助,我有:

  • Visual Studio 2015
  • Microsoft.Practices.Prism.Mvvm 版本 1.1.1.0

给出错误的代码示例是

public Unit Unit
{
    get
    {
        var unit = GetUnit();
        if (unit == null && PropertySettings != null) return PropertySettings.GetDefaultUnit();

            return unit;
        }
        set
        {
            SetUnit(value);
            OnPropertyChanged();
        }
    }

这是从 BindableBase 继承的类的属性

【问题讨论】:

  • 你观察到什么错误?
  • 能否请您与我们分享一下出错代码的平安?
  • 右键单击 OnPropertyChanged,选择“go to implementation”,将找到的内容粘贴到 edit

标签: c# wpf mvvm prism


【解决方案1】:

你能验证一下吗:
1. CallerMemberName 确实存在

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
  1. 如果您能够将 C#6.0 用作 .NET 4.5.3 的一部分;试试 nameof 运算符

【讨论】:

  • 我打赌 BindableBase 没有([CallerMemberName] string propertyName = null)
  • @Will 赌输了:protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = null)github.com/PrismLibrary/Prism/blob/…
  • @R.Richards 不一定。没有说他实际上是在引用 那个 实现。
  • @Will 这是真的。我只是在扫描问题以获取版本号……没有。
【解决方案2】:

您正在使用不再受支持的包“Microsoft.Practices.Prism.Mvvm 版本 1.1.1.0”。您提供的链接不是您正在使用的包的源代码。您应该使用的 NuGet 包是 Prism.Core,其中包含 Prism.dll 并使用您链接到的源。

【讨论】:

  • 好的,所以我认为对CallerMemberName 的支持是在 Prism 6.0 中添加的,而在 Prism 5.0 中不存在?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多