Browse Source

Clear ContentPresenter data context.

When assigning a control to `ContentPresenter.Content` after a
non-control the data context should get cleared. Fixes another problem
in #831.
Steven Kirk 9 years ago
parent
commit
f73a10b593

+ 4 - 0
src/Avalonia.Controls/Presenters/ContentPresenter.cs

@@ -232,6 +232,10 @@ namespace Avalonia.Controls.Presenters
             {
                 DataContext = content;
             }
+            else
+            {
+                ClearValue(DataContextProperty);
+            }
 
             // Update the Child.
             if (newChild == null)

+ 16 - 0
tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests.cs

@@ -171,6 +171,22 @@ namespace Avalonia.Controls.UnitTests.Presenters
             Assert.Equal("foo", target.DataContext);
         }
 
+        [Fact]
+        public void Assigning_Control_To_Content_After_NonControl_Should_Clear_DataContext()
+        {
+            var target = new ContentPresenter();
+
+            target.Content = "foo";
+            target.UpdateChild();
+
+            Assert.True(target.IsSet(Control.DataContextProperty));
+
+            target.Content = new Border();
+            target.UpdateChild();
+
+            Assert.False(target.IsSet(Control.DataContextProperty));
+        }
+
         [Fact]
         public void Tries_To_Recycle_DataTemplate()
         {