diff --git a/src/Markup/Perspex.Markup.Xaml/PerspexXamlLoader.cs b/src/Markup/Perspex.Markup.Xaml/PerspexXamlLoader.cs index 2b134e5c6f..51d9be0e24 100644 --- a/src/Markup/Perspex.Markup.Xaml/PerspexXamlLoader.cs +++ b/src/Markup/Perspex.Markup.Xaml/PerspexXamlLoader.cs @@ -12,6 +12,8 @@ using Perspex.Platform; namespace Perspex.Markup.Xaml { using Context; + using Controls; + using Data; using OmniXaml.ObjectAssembler; /// @@ -160,11 +162,20 @@ namespace Perspex.Markup.Xaml private object Load(Stream stream, object rootInstance) { - return base.Load(stream, new Settings + var result = base.Load(stream, new Settings { RootInstance = rootInstance, InstanceLifeCycleListener = s_lifeCycleListener, }); + + var control = result as IControl; + + if (control != null) + { + DelayedBinding.ApplyBindings(control); + } + + return result; } } } diff --git a/tests/Perspex.Markup.Xaml.UnitTests/Xaml/BindingTests.cs b/tests/Perspex.Markup.Xaml.UnitTests/Xaml/BindingTests.cs index 48fcc7b698..8777a735aa 100644 --- a/tests/Perspex.Markup.Xaml.UnitTests/Xaml/BindingTests.cs +++ b/tests/Perspex.Markup.Xaml.UnitTests/Xaml/BindingTests.cs @@ -79,5 +79,25 @@ namespace Perspex.Markup.Xaml.UnitTests.Xaml Assert.Same(button, ((NonControl)button.Tag).Control); } } + + [Fact] + public void Binding_To_Window_Works() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var xaml = @" + +"; + var loader = new PerspexXamlLoader(); + var window = (Window)loader.Load(xaml); + + window.DataContext = new { Foo = "foo" }; + window.ApplyTemplate(); + + Assert.Equal("foo", window.Title); + } + } } }