Browse Source

Failing unit test for issue #500.

pull/504/head
Steven Kirk 10 years ago
parent
commit
4c8384db5f
  1. 16
      src/Markup/Perspex.Markup.Xaml/Data/Binding.cs
  2. 74
      tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

16
src/Markup/Perspex.Markup.Xaml/Data/Binding.cs

@ -16,6 +16,22 @@ namespace Perspex.Markup.Xaml.Data
/// </summary>
public class Binding : IBinding
{
/// <summary>
/// Initializes a new instance of the <see cref="Binding"/> class.
/// </summary>
public Binding()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="Binding"/> class.
/// </summary>
/// <param name="path">The binding path.</param>
public Binding(string path)
{
Path = path;
}
/// <summary>
/// Gets or sets the <see cref="IValueConverter"/> to use.
/// </summary>

74
tests/Perspex.Controls.UnitTests/Primitives/SelectingItemsControlTests.cs

@ -1,6 +1,7 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Perspex.Collections;
@ -8,6 +9,8 @@ using Perspex.Controls.Presenters;
using Perspex.Controls.Primitives;
using Perspex.Controls.Templates;
using Perspex.Interactivity;
using Perspex.Markup.Xaml.Data;
using Perspex.UnitTests;
using Xunit;
namespace Perspex.Controls.UnitTests.Primitives
@ -487,6 +490,56 @@ namespace Perspex.Controls.UnitTests.Primitives
Assert.True(called);
}
[Fact]
public void Changing_DataContext_Should_Not_Clear_Nested_ViewModel_SelectedItem()
{
var items = new[]
{
new Item(),
new Item(),
};
var vm = new MasterViewModel
{
Child = new ChildViewModel
{
Items = items,
SelectedItem = items[1],
}
};
var target = new SelectingItemsControl { DataContext = vm };
var itemsBinding = new Binding("Child.Items");
var selectedBinding = new Binding("Child.SelectedItem");
target.Bind(SelectingItemsControl.ItemsProperty, itemsBinding);
target.Bind(SelectingItemsControl.SelectedItemProperty, selectedBinding);
Assert.Equal(1, target.SelectedIndex);
Assert.Same(vm.Child.SelectedItem, target.SelectedItem);
items = new[]
{
new Item(),
new Item(),
new Item(),
};
vm = new MasterViewModel
{
Child = new ChildViewModel
{
Items = items,
SelectedItem = items[2],
}
};
target.DataContext = vm;
Assert.Equal(2, target.SelectedIndex);
Assert.Same(vm.Child.SelectedItem, target.SelectedItem);
}
private FuncControlTemplate Template()
{
return new FuncControlTemplate<SelectingItemsControl>(control =>
@ -502,5 +555,26 @@ namespace Perspex.Controls.UnitTests.Primitives
{
public bool IsSelected { get; set; }
}
private class MasterViewModel : NotifyingBase
{
private ChildViewModel _child;
public ChildViewModel Child
{
get { return _child; }
set
{
_child = value;
RaisePropertyChanged();
}
}
}
private class ChildViewModel : NotifyingBase
{
public IList<Item> Items { get; set; }
public Item SelectedItem { get; set; }
}
}
}

Loading…
Cancel
Save