diff --git a/src/Avalonia.Controls/Presenters/ContentPresenter.cs b/src/Avalonia.Controls/Presenters/ContentPresenter.cs index c17b11a374..40fc2f302c 100644 --- a/src/Avalonia.Controls/Presenters/ContentPresenter.cs +++ b/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) diff --git a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests.cs b/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests.cs index a54ff022ac..88d26334ed 100644 --- a/tests/Avalonia.Controls.UnitTests/Presenters/ContentPresenterTests.cs +++ b/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() {