MvvmLight RaisePropertyChanged("")

MvvmLight RaisePropertyChanged("")

根据 MSDN doc on PropertyChanged,如果将空字符串传递给方法,所有属性都会刷新。使用MvvmLight RaisePropertyChanged 时有这样的事情吗?传递 "" 只是用 "" 抛出事件。

不确定 MVVM-Light,但这是您可以使用 .net fx 4.5 + 执行的操作:

using System.Runtime.CompilerServices;

class SomeClass : INotifyPropertyChanged
{
    private int somefield;

    public int SomeProperty
    {
        get { return somefield; }
        set 
        {
            somefield = value;
            OnPropertyChanged();
        }
    }

    public void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged = delegate { };
}

MVVM Light 似乎有一个检查功能,可以检查您传入的 属性 名称是否存在。这在这种情况下没有意义。

快速搜索显示 issue logged on the CodePlex site 并标记为已关闭并已修复,它似乎已在最新的代码库中修复。您使用的是什么版本?

如果您无法升级,我想您可以添加自己的调用器(注意受保护的 PropertyChangedHandler 访问器存在于 5.x 中,我不知道它是否存在于您的版本中)。

private void RaiseAllPropertiesChanged()
{
    var handler = PropertyChangedHandler;

    if (handler != null)
    {
        handler(this, new PropertyChangedEventArgs(string.Empty));            
    }
}

如果您使用的是 V3,似乎没有解决方案(PropertyChangedHandler 不存在并且 属性 验证将抛出您所看到的异常)。由于这似乎是一个已修复的已知错误,我建议使用更高版本。

最近在 MvvmLight 5.3 上遇到了这个问题,我很困惑为什么下面的内容没有更新我 UI 上的所有绑定属性:

RaisePropertyChanged();

事实上,为了更新所有属性,必须将一个空的 string 传递给 RaisePropertyChanged,此时所有属性都会更新:

RaisePropertyChanged(string.Empty);