diff --git a/src/Spectre.Console.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs b/src/Spectre.Console.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs
index b5b63e2..2a2b58d 100644
--- a/src/Spectre.Console.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs
+++ b/src/Spectre.Console.Tests/Data/Settings/OptionalArgumentWithDefaultValueSettings.cs
@@ -1,3 +1,4 @@
+using System;
 using System.ComponentModel;
 using Spectre.Console.Cli;
 
@@ -10,6 +11,12 @@ namespace Spectre.Console.Tests.Data
         public string Greeting { get; set; }
     }
 
+    public sealed class OptionalArgumentWithPropertyInitializerSettings : CommandSettings
+    {
+        [CommandArgument(0, "[NAMES]")]
+        public string[] Names { get; set; } = Array.Empty<string>();
+    }
+
     public sealed class OptionalArgumentWithDefaultValueAndTypeConverterSettings : CommandSettings
     {
         [CommandArgument(0, "[GREETING]")]
diff --git a/src/Spectre.Console.Tests/Unit/Cli/CommandAppTests.cs b/src/Spectre.Console.Tests/Unit/Cli/CommandAppTests.cs
index 63fa00d..8fe01b9 100644
--- a/src/Spectre.Console.Tests/Unit/Cli/CommandAppTests.cs
+++ b/src/Spectre.Console.Tests/Unit/Cli/CommandAppTests.cs
@@ -244,6 +244,50 @@ namespace Spectre.Console.Tests.Unit.Cli
             });
         }
 
+        [Fact]
+        public void Should_Assign_Property_Initializer_To_Optional_Argument()
+        {
+            // Given
+            var app = new CommandAppTester();
+            app.SetDefaultCommand<GenericCommand<OptionalArgumentWithPropertyInitializerSettings>>();
+            app.Configure(config =>
+            {
+                config.PropagateExceptions();
+            });
+
+            // When
+            var result = app.Run(Array.Empty<string>());
+
+            // Then
+            result.ExitCode.ShouldBe(0);
+            result.Settings
+                .ShouldBeOfType<OptionalArgumentWithPropertyInitializerSettings>()
+                .And(settings => settings.Names.ShouldNotBeNull())
+                .And(settings => settings.Names.ShouldBeEmpty());
+        }
+
+        [Fact]
+        public void Should_Overwrite_Property_Initializer_With_Argument_Value()
+        {
+            // Given
+            var app = new CommandAppTester();
+            app.SetDefaultCommand<GenericCommand<OptionalArgumentWithPropertyInitializerSettings>>();
+            app.Configure(config =>
+            {
+                config.PropagateExceptions();
+            });
+
+            // When
+            var result = app.Run("ABBA", "Herreys");
+
+            // Then
+            result.ExitCode.ShouldBe(0);
+            result.Settings
+                .ShouldBeOfType<OptionalArgumentWithPropertyInitializerSettings>()
+                .And(settings => settings.Names.ShouldContain("ABBA"))
+                .And(settings => settings.Names.ShouldContain("Herreys"));
+        }
+
         [Fact]
         public void Should_Assign_Default_Value_To_Optional_Argument_Using_Converter_If_Necessary()
         {
diff --git a/src/Spectre.Console/Cli/Internal/Binding/CommandPropertyBinder.cs b/src/Spectre.Console/Cli/Internal/Binding/CommandPropertyBinder.cs
index a7f4cbb..0277e78 100644
--- a/src/Spectre.Console/Cli/Internal/Binding/CommandPropertyBinder.cs
+++ b/src/Spectre.Console/Cli/Internal/Binding/CommandPropertyBinder.cs
@@ -10,7 +10,10 @@ namespace Spectre.Console.Cli
 
             foreach (var (parameter, value) in lookup)
             {
-                parameter.Property.SetValue(settings, value);
+                if (value != default)
+                {
+                    parameter.Property.SetValue(settings, value);
+                }
             }
 
             // Validate the settings.