MvvmLight RaisePropertyChanged("")

时间:2015-04-16 14:16:41

标签: c# mvvm-light

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

3 个答案:

答案 0 :(得分:2)

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

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

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

private void RaiseAllPropertiesChanged()
{
    var handler = PropertyChangedHandler;

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

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

答案 1 :(得分:0)

不确定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 { };
}

答案 2 :(得分:0)

最近在使用MvvmLight 5.3遇到此问题时,我感到困惑,为什么以下内容未更新UI上的所有绑定属性:

settings/local.py

实际上,为了更新所有属性,必须将一个空的X_FRAME_OPTIONS = "ALLOWALL" XS_SHARING_ALLOWED_METHODS = ["POST", "GET", "OPTIONS", "PUT", "DELETE"] 传递到RaisePropertyChanged(); 中,这时所有属性都将更新:

string