Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BindableBase.SetProperty未更新UI_C#_Wpf_Mvvm_Prism_Inotifypropertychanged - Fatal编程技术网

C# BindableBase.SetProperty未更新UI

C# BindableBase.SetProperty未更新UI,c#,wpf,mvvm,prism,inotifypropertychanged,C#,Wpf,Mvvm,Prism,Inotifypropertychanged,这真的很奇怪,但当我调用BindableBase.SetProperty()时,UI并没有更新: 我正在使用Prism.Core.6.1.0\lib\net45\Prism.dll及其Version=6.1.0.0 但是,OnPropertyChanged(string propertyName)非常有效: public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string

这真的很奇怪,但当我调用
BindableBase.SetProperty()
时,UI并没有更新:

我正在使用
Prism.Core.6.1.0\lib\net45\Prism.dll
及其
Version=6.1.0.0

但是,
OnPropertyChanged(string propertyName)
非常有效:

public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

我错过了什么?任何帮助都将不胜感激!:)

这是因为
person=value指令
BindableBase.SetProperty
检查两个参数之间是否相等,如果它们不相等,则仅引发
PropertyChanged
事件。因此,删除这一行应该会有所帮助。

这是因为
person=value指令
BindableBase.SetProperty
检查两个参数之间是否相等,如果它们不相等,则仅引发
PropertyChanged
事件。因此,删除这一行应该会有所帮助。

SetProperty的工作方式是为您执行所有必需的更新逻辑。它将检查该值是否已更改,然后立即返回或更新该值(当该值通过
ref
)并引发属性更改事件

您提前完成了一半的工作,因此它总是会立即返回,因为它会发现
person
字段和
值之间没有差异

只需将您的属性更改为:

public string Person
{
    get { return person; }
    set { SetProperty(ref person, value); }
}

SetProperty
的工作方式是为您执行所有必需的更新逻辑。它将检查该值是否已更改,然后立即返回或更新该值(当该值通过
ref
)并引发属性更改事件

您提前完成了一半的工作,因此它总是会立即返回,因为它会发现
person
字段和
值之间没有差异

只需将您的属性更改为:

public string Person
{
    get { return person; }
    set { SetProperty(ref person, value); }
}

@downvoter你为什么不投票?@downvoter你为什么不投票?谢谢你的回答!这真的很酷,但Grx70是第一个,他回答得很好。我对你的努力投了赞成票。你的回答真的很好。谢谢你的回答!这真的很酷,但Grx70是第一个,他回答得很好。我对你的努力投了赞成票。你的回答很好。