Вы должны написать свой лог c внутри обратного вызова каждого свойства. Подход обработчика событий ValueChanged
требует тесно связанного кода, и он нарушит шаблон MVVM.
Если вы предпочитаете способ DP:
public decimal Value1
{
get { return (decimal)GetValue(Value1Property); }
set { SetValue(Value1Property, value); }
}
public static readonly DependencyProperty Value1Property =
DependencyProperty.Register("Value1", typeof(decimal), typeof(MyVM),
new PropertyMetadata(0m, (d, e) =>
{
var vm = d as MyVM;
vm.TotalValue = e.NewValue + vm.Value2;
}));
public decimal Value2
{
get { return (decimal)GetValue(Value2Property); }
set { SetValue(Value2Property, value); }
}
public static readonly DependencyProperty Value2Property =
DependencyProperty.Register("Value2", typeof(decimal), typeof(MyVM),
new PropertyMetadata(0m, (d, e) =>
{
var vm = d as MyVM;
vm.TotalValue = e.NewValue + vm.Value1;
}));
Или, если вы предпочитаете INotifyPropertyChanged
способ:
public decimal Value1
{
get => _value1;
set {
_value1 = value;
TotalValue = value + Value2;
NotifyPropertyChanged();
}
}
public decimal Value2
{
get => _value2;
set
{
_value2 = value;
TotalValue = value + Value1;
NotifyPropertyChanged();
}
}
Обратите внимание, что запись TotalValue = ...
будет обрабатывать собственный NotifyPropertyChanged. Однако запись _totalValue = ...
не работает.