public ObservableByTracking()
    {
        _expando = new Dictionary <string, ObservablePropertyContext>();

        var properties = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList();

        foreach (var property in properties)
        {
            var valueContext = new ObservablePropertyContext(property.Name, property.PropertyType)
            {
                Value = GetDefault(property.PropertyType)
            };

            _expando[BuildKey(valueContext)] = valueContext;
        }
    }
 private static string BuildKey(ObservablePropertyContext observablePropertyContext)
 {
     return($"{observablePropertyContext.Type.Name}.{observablePropertyContext.Name}");
 }