Я разрабатываю приложение UWP на основе шаблона MVVM.
Я создал представление, привязанное к родительской модели представления. Модель родительского представления содержит свойство дочерней модели представления.
Модель представления дочернего элемента содержит некоторую информацию, особенно «NumberOfDays» и «AmountPerDay».
Модель родительского представления содержит собственные свойства, в частности «DiscountAmount» и «TravellingExpenseAmount». Родительская ViewModel Также содержит вычисляемые свойства: - TotalHT = (NumberOfDays * AmountPerDay) - DiscountAmount + TravellingExpenseAmount
это свойство привязано к «Total avant Taxes» на снимке экрана
Обратите внимание, что расчет основан на свойства из двух ViewModels.
Проблема заключается в следующем: - Когда я обновляю свойства из родительской ViewModel (DiscountAmount или TravellingExpenseAmount), изменяется расчетное свойство TotalHT и обновляется значение текстового поля - Когда я обновляю свойства из ChildViewModel (NumberofDays или AmountPerDay), Ничего не происходит, даже если из дочерней модели ViewModel я вручную RaisePropoertyChange родительского Calculated propoerty (RaisePropertyChange («Расчетное свойство»)).
Все модели ViewModels реализуют INotifiedPropertychange (набор инструментов MVVM light).
Обновление: кажется, что только свойства, созданные из двух моделей просмотра, не обновляются правильно
Есть ли у вас какие-либо идеи о решении ??
Обновление: Чтобы быть более точным, я обновил свой код, чтобы выяснить свою проблему на основе комментариев Антона (спасибо ему ;-))
Я заменил вычисленное свойство на "записываемое" Следующее свойство:
private string totalBeforTaxes3 = 0.ToString("C", CultureInfo.CurrentCulture);
public string TotalBeforeTaxes3
{
get => totalBeforTaxes3;
set => Set(() => TotalBeforeTaxes3, ref totalBeforTaxes3, value, true);
}
Я устанавливаю значение по умолчанию на 0.
Я также создал метод для обновления значения и принудительного выполнения RaisePropertyChanged (даже если это бесполезно из-за того, что метод Set () уже делает это. Вот код метода:
public void CalculateTotalBeforeTaxes()
{
TotalBeforeTaxes3 = (Double.Parse(Details.TotalHT, NumberStyles.Currency) - Double.Parse(DiscountAmount, NumberStyles.Currency) + Double.Parse(TravellingExpensesAmount, NumberStyles.Currency)).ToString("C", CultureInfo.CurrentCulture);
RaisePropertyChanged("TotalBeforeTaxes3");
}
Теперь, когда я открываю страницу I, значение текстового поля равно O € и никогда не обновляется. Каждый раз, когда я обновляю значение, которое Часть расчета вызывается CalculateTotalBeforeTaxes () и RaisePropertyChanged вызывается без каких-либо ошибок.
Другая информация заключается в том, что ChildViewModel инициализируется не в конструкторе ParentViewModel, а после (из-за ограничения ViewModelLocator). есть удары ??
заранее спасибо