2013-04-29 4 views
0

Я пытаюсь сделать «Ясный флаг» в своем коде. У меня постоянно отображаются данные в пользовательском интерфейсе, и я хочу, чтобы пользователь мог очищать данные, когда код работает с кнопкой «Очистить». У меня есть вторая нить, собирающая и обновляющая данные в потоке пользовательского интерфейса. Я попытался использовать флаг в свойствах, который, когда видит, что «Clear Flag» имеет значение true, зависит от заданного значения. Когда нажата кнопка очистки, я устанавливаю свой «Clear Flag» на true, и он очищает данные, но моя проблема заключается в том, чтобы знать, когда это будет сделано, и установить «Clear Flag» обратно на false, когда это будет сделано.Выполнение события после события PropertyChanged

private bool _clear; 
public bool Clear 
{ 
    get 
    { 
     return _clear; 
    } 
    set 
    { 
     _clear = value; 
     OnPropertyChanged("Clear"); 

     if (value) 
     { 
      OnPropertyChanged(String.Empty); 
     } 
    } 
} 

private int _motorRPM; 
public int MotorRPM 
{ 
    get 
    { 
     return _motorRPM; 
    } 
    set 
    { 
     _motorRPM = value; 
     OnPropertyChanged("MotorRPM"); 
    } 
} 


private int _aveRPM; 
public int AveRPM 
{ 
    get 
    { 
     return _aveRPM; 
    } 
    set 
    { 
     if (Clear) 
     { 
      _aveRPM = 0; 
     } 
     else 
     { 
      _aveRPM = (_aveRPM + value)/2; 
     } 
     OnPropertyChanged("AveRPM"); 
    } 
} 


private int _minRPM = Int32.MaxValue; 
public int MinRPM 
{ 
    get 
    { 
     return _minRPM; 
    } 
    set 
    { 
     if (Clear) 
     { 
      _minRPM = Int32.MaxValue; 
     } 
     else 
     { 
      if (value < _minRPM) 
      { 
       _minRPM = value; 
      } 
     } 
     OnPropertyChanged("MinRPM"); 
    } 
} 


private int _maxRPM; 
public int MaxRPM 
{ 
    get 
    { 
     return _maxRPM; 
    } 
    set 
    { 
     if (Clear) 
     { 
      _maxRPM = 0; 
     } 
     else 
     { 
      if (value > _maxRPM) 
      { 
       _maxRPM = value; 
      } 
     } 
     OnPropertyChanged("MaxRPM"); 
    } 
} 

Как вы можете видеть, у меня есть «Clear» Свойство, что при установке истины будет вызывать обновление всех свойств с OnPropertyChanged (String.Empty) с каждым свойством покоя известного значения, когда «Clear» истинно ,

Как установить Clear обратно в false, когда все события PropertyChanged завершены?

+0

Да? Do 'Clear = false;' так, как я полагаю, вы сделали 'clear = true', чтобы установить его ... Или ваш код не содержит какой-либо важной части/информации? – Niclas

+0

Ах. Извините, неправильно поняли вас :) Для меня вы как бы злоупотребляете измененным механизмом собственности. Почему бы вам не использовать одну команду и не сбросить все свойства, и вместо этого каждое свойство обрабатывает свой собственный PropertyChanged? – Niclas

ответ

0

Как сказал Никлас, я бы сказал: не делайте этого так! Цель PropertyChanged в вашей ViewModel заключается в обновлении пользовательского интерфейса. Если бы у вас была какая-то логика в зависимости от вашего свойства, то это будет кошмар для отладки!

Держите ваше имущество максимально чистым. Теперь, чтобы обновить некоторые зависимое значение, было бы лучше, чтобы сделать что-то вроде этого:

private bool _clear; 
public bool Clear 
{ 
    get 
    { 
     return _clear; 
    } 
    set 
    { 
     _clear = value; 
     OnPropertyChanged("Clear"); 

     if (_clear) 
      ClearValues(); 
    } 
} 

public void ClearValues() 
{ 
    AveRPM=0; 
    MinRPM=0; 
    MaxRPM=0; 
    ... 
    Clear=False; 
} 

Не совершенным, но кажется намного более читаемым и ремонтопригодны мне.

Надеюсь, это поможет.

+0

Вы знаете, что вы, парни, правы. Поскольку у меня есть связанная с кнопкой команда, вызывающая функцию, которая устанавливает Clear в true, я собираюсь избавиться от Clear и поместить туда ClearValues ​​(). Спасибо. – Bluto

+0

Это работает, спасибо за помощь, но я сделал это немного иначе. Вместо AveRPM = 0 я устанавливаю _aveRPM = 0, так как у меня есть свойство math. Кроме этого, спасибо. Просто проигнорируйте то, что я поставил раньше. Это не позволило мне отредактировать его. – Bluto

Смежные вопросы