如何解决MVVM指示灯当属性值真正改变时执行方法的正确方法
设置属性后,此代码允许执行该方法。 它执行与设置属性一样多的时间。 我想知道仅在属性值真正更改的情况下才执行该方法的变体。
public const string MyPropertyPropertyName = "MyProperty";
private bool _myProperty = false;
public bool MyProperty
{
get
{
return _myProperty;
}
set
{
Set(MyPropertyPropertyName,ref _myProperty,value);
DoSomething();
}
}
private void DoSomething()
{
// DO YOUR WORK
}
解决方法
Set
方法应返回一个bool
值,该值指示该属性是否已实际设置:
set
{
if (Set(MyPropertyPropertyName,ref _myProperty,value))
DoSomething();
}
如果它不返回值,则应修改它或使用自己的自定义Set
方法:
protected bool Set<T>(string propertyName,ref T storage,T value)
{
if (Equals(storage,value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
,
如果我正确理解“真正改变”的意思,则可以像这样围绕DoSomehting
通话:
if (value != _myProperty)
{
DoSomething();
}
有关value
关键字的更多信息,请参见here
您可以在设置值之前将其与支持者进行比较。
function Joke(props) {
let content = <div>None of the condition matched!</div>;
if (props.question && props.punchline) {
content = (
<div>
<h3>Question: {props.question}</h3>
<h3>Answer: {props.punchline}</h3>
<hr />
</div>
)
} else if (props.punchline) {
content = (
<div>
<h3>Answer: {props.punchline}</h3>
<hr />
</div>
)
}
return content;
}
如果需要该属性的新值,则可能将值传递给DoSomething。
上面的代码使运行dosomething之前的比较清楚。 除非您定期从每个或大多数设置者那里调用方法,否则我不会非常热衷于在特殊情况下更改标准方法签名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。