2012-05-17 2 views
0

Моя проблема. У меня есть три свойства с взаимозависимыми в моем приложении WPF. Я также внедрил InotifyPropertyChanged для класса. Я не уверен, как обновить второе свойство на основе другого.Обновление другой недвижимости, основанной на собственности, наоборот

Пример:

Свойства: ActualValue, ChangedValue, изменение

ActualValue фиксирована, а можно обновить ChangedValue и Изменить. Это означает, что если я обновляю ChangedValue, изменение рассчитывается как (ActualValue-ChangedValue) и устанавливается. И когда вы меняете обновления, значение ChangedValue будет рассчитываться на основе ActualValue и Change.

ответ

1

Вы можете поместить логику внутри свойств свойств, от которых зависят другие. Поскольку это круговая зависимость, просто убедитесь, что внутри сеттеров вы меняете приватную переменную - не используйте setterter свойств, поскольку это создаст бесконечный цикл. Как это:

private string _change, _changedValue; 

public string ChangedValue { 
    set { 
     _changedValue = value; 
     _change = ActualValue - _changedValue; 
     NotifyPropertyChanged("ChangedValue"); 
     NotifyPropertyChanged("Change"); 
    } 
} 


public string Change { 
    set { 
     _change = value; 
     _changedValue = ActualValue - _change; 
     NotifyPropertyChanged("Change"); 
     NotifyPropertyChanged("ChangedValue"); 
    } 
} 
+1

Кроме того, необходимо добавить события RaisePropertyChanged в обоих сеттеров для «ChangeValue» и «Смена», так что и обновляются в любой привязки данных к ним. –

+0

@PhilWright ах спасибо, забыл об этом. Обновлено. – McGarnagle

+1

Вам необходимо поднять значение ChangeValue AND Change в обоих сеттерах, так как вы каждый раз изменяли оба значения. –