OnPropertyChanged - Calculated property

238
15 июня 2017, 03:37

Доброго времени суток. Такой вопрос:

имеется модель:

public class MyModel : ModelBase
{
    public double Count
    {
        get => _count;
        set
        {
            _count = value; OnPropertyChanged();
        }
    }
    public virtual Model2 Model2
    {
        get => _model2;
        set
        {
            _model2 = value; OnPropertyChanged();
        }
    }
    public decimal Amount
    {
        get => decimal.Round(Model2.Price * (decimal)Count, 2, MidpointRounding.AwayFromZero);
    }
}

в MyModel есть свойство Count, в Model2 есть свойство Price. В MyModel есть Calculated свойство Amount.

А теперь вопрос: как мне уведомить об изменении Amount, когда поменялось свойство MyModel.Count и Model2.Price?

Answer 1

При смене Model2 подпишитесь на ее событие PropertyChanged и вызовите OnPropertyChanged(nameof(Amount));:

public virtual Model2 Model2
{
    get => _model2;
    set
    {
        _model2.PropertyChanged -= Model2PropertyChanged;
        _model2 = value;
        _model2.PropertyChanged += Model2PropertyChanged;
        OnPropertyChanged();
    }
}
private void Model2PropertyChanged(...)
{
    if (e.PropertyName == nameof(Model2.Price))
        OnPropertyChanged(nameof(Amount));
}

Не забудьте при подписке проверку Model2 на null
Могут быть неточности по синтаксису - не проверял

READ ALSO
Проблема с кодировкой C#

Проблема с кодировкой C#

Я работаю с VK APIПри запросах с браузера все работает стабильно, но при запросах из моей программы английские символы возвращаются правильно,...

272
Обработка исключений, скорость

Обработка исключений, скорость

У меня в конторе, где я работаю, есть множество кастомных библиотекВ том числе есть свой DAL для базы данных MSSQL

227
Определить если Control полностью отрисован в контейнере Windows Forms

Определить если Control полностью отрисован в контейнере Windows Forms

Каким способом можно определить если Control полностью отрисован в контейнеренужно в цикле проверить все дочерние контролы и определить какой...

222
Чтение данных из базы Oracle

Чтение данных из базы Oracle

ЗдравствуйтеНужно считать данные из таблицы базы Oracle

317