diff --git a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs index d4c7137fdc..2fef8f77c8 100644 --- a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs +++ b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs @@ -34,6 +34,21 @@ namespace Avalonia.Collections _inner = new Dictionary(capacity); } + /// + /// Initializes a new instance of the class using an IDictionary. + /// + public AvaloniaDictionary(IDictionary dictionary, IEqualityComparer? comparer = null) + { + if (dictionary != null) + { + _inner = new Dictionary(dictionary, comparer ?? EqualityComparer.Default); + } + else + { + throw new ArgumentNullException(nameof(dictionary)); + } + } + /// /// Occurs when the collection changes. /// diff --git a/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs b/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs index 739c3fed79..35fd946670 100644 --- a/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs +++ b/tests/Avalonia.Base.UnitTests/Collections/AvaloniaDictionaryTests.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; + using Avalonia.Collections; using Avalonia.Data.Core; + using Xunit; namespace Avalonia.Base.UnitTests.Collections @@ -156,5 +158,34 @@ namespace Avalonia.Base.UnitTests.Collections Assert.Equal(new[] { "Count", CommonPropertyNames.IndexerName }, tracker.Names); } + + [Fact] + public void Constructor_Should_Throw_ArgumentNullException_When_Collection_Is_Null() + { + Assert.Throws(() => + { + var target = new AvaloniaDictionary(null, null); + }); + } + + + [Fact] + public void Constructor_Should_Initialize_With_Provided_Collection() + { + var initialCollection = new Dictionary + { + { "key1", "value1" }, + { "key2", "value2" } + }; + + var target = new AvaloniaDictionary(initialCollection, null); + + Assert.Equal(2, target.Count); + Assert.Equal("value1", target["key1"]); + Assert.Equal("value2", target["key2"]); + } + + + } }