Update extremities losses when selected type changes The following code works, but is it a good idea to call another method in a setter?

public TypeSignalDTO SelectedTypeSignal
{
    get { return _selectedTypeSignal; }
    set
    {
        _selectedTypeSignal = value;
        RaisePropertyChanged(() =&gt; SelectedTypeSignal);
        UpdateExtremitiesLosses(); //This really bugs me.
    }
}


public void UpdateExtremitiesLosses()
{
    if (_completeLink.Any() &amp;&amp; SelectedTypeSignal != null)
    {
        try
        {
            _lossService.SetLinkLosses(SelectedTypeSignal.Id_TSI, _completeLink);
            ShowLossColumn = true;
            TotalLoss = _completeLink.Last().LossAtCurrentPoint;
        }
        catch (ServiceException ex)
        {
            ShowLossColumn = false;
            TotalLoss = 0;
            _dialogService.ShowErrorMessage(ex.Message);
        }
        finally
        {
            Extremities = _completeLink.ToViewModel().ToList();
        }

    }
}


As you can see the setter calls another method: UpdateExtremitiesLosses which in turn changes other properties on the view model ShowLossColumn, Extremities and TotalLoss.

I know that properties are actually functions, but changing another property when calling a setter seems like an unintended side effect to me. 

Being a beginner with WPF this really seems wrong to me. I would like to know if it is a better idea to subscribe to the ChangeEvent and call the method there, or just call the method in the setter.
The access to a property should be fast. If anything in a getter or setter of a property needs more time than usual to return it should better be a method.  

So if UpdateExtremitiesLosses() is rather time consuming or if it should react on the changes made and there is an event which should handle changes like you mentioned, this call should better live inside this event.  


public TypeSignalDTO SelectedTypeSignal
{
    get { return _selectedTypeSignal; }
    set
    {
        _selectedTypeSignal = value;
        RaisePropertyChanged(() =&gt; SelectedTypeSignal);
        UpdateExtremitiesLosses(); //This really bugs me.
    }
}  



If you haven't done it already, you should override the =, != operators together with the Equals() and GetHashCode() methods and check before you call RaisePropertyChanged() if they are equal by any chance. If they are equal you shouldn't raise the event to prevent unneeded code execution.  


RaisePropertyChanged(() =&gt; SelectedTypeSignal);  



here you should simply use the _selectedTypeSignal instead of the property, because there is no need to call the getter of the property if you already has its value stored in a local variable.