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