Browse Source

Fix SelectingItemsControl.SelectedItems bug.

Make sure unbound SelectedItems cleared when DataContext is cleared.
pull/342/merge
Steven Kirk 11 years ago
parent
commit
626aa9cd19
  1. 5
      src/Perspex.Controls/Control.cs
  2. 28
      tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

5
src/Perspex.Controls/Control.cs

@ -419,6 +419,11 @@ namespace Perspex.Controls
if (control != null)
{
control.IsDataContextChanging = notifying;
if (!notifying)
{
control.OnDataContextFinishedChanging();
}
}
}
}

28
tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests_Multiple.cs

@ -427,6 +427,34 @@ namespace Perspex.Controls.UnitTests.Primitives
// Clear DataContext and ensure that SelectedItems is still set in the VM.
target.DataContext = null;
Assert.Equal(new[] { "bar" }, vm.SelectedItems);
// Ensure target's SelectedItems is now clear.
Assert.Empty(target.SelectedItems);
}
[Fact]
public void Unbound_SelectedItems_Should_Be_Cleared_When_DataContext_Cleared()
{
var data = new
{
Items = new[] { "foo", "bar", "baz" },
};
var target = new TestSelector
{
DataContext = data,
Template = Template(),
};
var itemsBinding = new Binding { Path = "Items" };
itemsBinding.Bind(target, TestSelector.ItemsProperty);
Assert.Same(data.Items, target.Items);
target.SelectedItems.Add("bar");
target.DataContext = null;
Assert.Empty(target.SelectedItems);
}
private FuncControlTemplate Template()

Loading…
Cancel
Save