#wpf #properties #mvvm-light
#wpf #свойства #mvvm-light
Вопрос:
Этот код позволяет выполнять метод, когда свойство установлено. Он выполняется столько раз, сколько установлено свойство. Я хотел бы знать вариант, когда метод выполняется только в случае, когда значение свойства действительно изменяется.
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
}
Ответ №1:
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;
}
Ответ №2:
Если я правильно понимаю, что вы подразумеваете под «действительно измененным», вы можете окружить свой вызов DoSomehting
следующим образом :
if (value != _myProperty)
{
DoSomething();
}
Более подробную информацию о value
ключевом слове можно найти здесь
Ответ №3:
Вы могли бы просто сравнить значение с инициатором до его установки.
set
{
if(!Equals(value, _myProperty))
{
DoSomething();
}
Set(MyPropertyPropertyName, ref _myProperty, value);
}
Возможно, передача значения в doSomething, если ему требуется новое значение для свойства.
Приведенный выше код дает понять, какое сравнение выполняется перед запуском dosomething. Если вы регулярно не вызываете методы из каждого или большинства установщиков, я бы не стал так сильно стремиться изменить стандартную сигнатуру метода для исключительных обстоятельств.
Комментарии:
1. возможно ли выполнить метод, когда свойство имеет значение true? Как это будет выглядеть?
2. Просто подставьте значение == true в if