Example:
public class Base : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public class Descendent : Base
{
public Descendent()
{
DetermineDefaultMyPropertyValue();
}
public string MyProperty { get; set; }
private void DetermineDefaultMyPropertyValue()
{
MyProperty = "Default value";
}
protected override void OnPropertyChanged(string propertyName)
{
// some property changed logic
}
}
It could be solved by changing the auto implemented property to use a backing field. ( Only the ones that are set while constructing the object. )
public class Descendent : Base
{
public Descendent()
{
DetermineDefaultMyPropertyValue();
}
private string _myProperty;
public string MyProperty {
get { return _myProperty; }
set { _myProperty = value; }
}
private void DetermineDefaultMyPropertyValue()
{
_myProperty = "Default value";
}
protected override void OnPropertyChanged(string propertyName)
{
// some property changed logic
}
}