diff options
author | Eric Maupin <me@ermau.com> | 2018-05-17 18:46:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-17 18:46:44 +0300 |
commit | 059089a4921dd9d96fd3617e3cf33d816a524698 (patch) | |
tree | 827eb20cc5ec98442ecf003026b79614e0fbd17c | |
parent | ac4507e3972a86b89b8508c845e9173ff245cbbb (diff) | |
parent | e9c72d08018489e219252f2a08927b8ce757587f (diff) |
Merge pull request #304 from xamarin/ermau-d15-7-fixesd15-7
Push fixes to 15.7
4 files changed, 72 insertions, 25 deletions
diff --git a/Xamarin.PropertyEditing.Tests/SimpleCollectionViewTests.cs b/Xamarin.PropertyEditing.Tests/SimpleCollectionViewTests.cs index e77db91..00f65b0 100644 --- a/Xamarin.PropertyEditing.Tests/SimpleCollectionViewTests.cs +++ b/Xamarin.PropertyEditing.Tests/SimpleCollectionViewTests.cs @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -555,8 +556,6 @@ namespace Xamarin.PropertyEditing.Tests }); Assume.That (view, Is.Not.Empty); - - var topKvp = view.Cast<KeyValuePair<string, SimpleCollectionView>>().First(); var leafKvp = topKvp.Value.Cast<KeyValuePair<string, SimpleCollectionView>>().First(); var leafItem = leafKvp.Value.Cast<object>().First(); @@ -631,6 +630,64 @@ namespace Xamarin.PropertyEditing.Tests Assert.That (view.Cast<TestNode>().ElementAt (2), Is.EqualTo (nodes[1])); } + [Test] + public void AddBackInUnorderedPartial() + { + var nodes = new ObservableCollection<TestNode> { + new TestNode ("B"), + new TestNode ("Xamarin"), + new TestNode ("A"), + new TestNode ("Xamagon"), + }; + + var view = new SimpleCollectionView (nodes, new SimpleCollectionViewOptions { + DisplaySelector = TestNodeDisplaySelector + }); + + Assume.That (view.Cast<TestNode>().ElementAt (0), Is.EqualTo (nodes[2])); + Assume.That (view.Cast<TestNode>().ElementAt (1), Is.EqualTo (nodes[0])); + Assume.That (view.Cast<TestNode>().ElementAt (2), Is.EqualTo (nodes[3])); + Assume.That (view.Cast<TestNode>().ElementAt (3), Is.EqualTo (nodes[1])); + + view.Options.Filter = o => ((TestNode)o).Key.StartsWith ("Xamarin"); + + Assume.That (view.Cast<TestNode>().Count(), Is.EqualTo (1)); + Assume.That (view.Cast<TestNode>().ElementAt (0), Is.EqualTo (nodes[1])); + + view.Options.Filter = o => ((TestNode)o).Key.StartsWith ("Xama"); + + Assert.That (view.Cast<TestNode>().ElementAt (0), Is.EqualTo (nodes[3])); + Assert.That (view.Cast<TestNode>().ElementAt (1), Is.EqualTo (nodes[1])); + } + + [Test] + public void SettingEvenSameFilterTriggersUpdate () + { + var nodes = new ObservableCollection<TestNode> { + new TestNode ("Baz"), + new TestNode ("Bar"), + new TestNode ("A") + }; + + var view = new SimpleCollectionView (nodes, new SimpleCollectionViewOptions { + DisplaySelector = TestNodeDisplaySelector + }); + + string textFilter = "B"; + Predicate<object> filter = o => ((TestNode) o).Key.StartsWith (textFilter, StringComparison.OrdinalIgnoreCase); + view.Options.Filter = filter; + + Assume.That (view, Contains.Item (nodes[0])); + Assume.That (view, Contains.Item (nodes[1])); + Assume.That (view, Does.Not.Contain (nodes[2])); + + textFilter = "Bar"; + view.Options.Filter = filter; + Assert.That (view, Does.Not.Contain (nodes[0])); + Assert.That (view, Contains.Item (nodes[1])); + Assert.That (view, Does.Not.Contain (nodes[2])); + } + private IEnumerable TestNodeChildrenSelector (object o) { return ((TestNode)o).Children; diff --git a/Xamarin.PropertyEditing.Windows/Themes/PropertyEditorPanelStyle.xaml b/Xamarin.PropertyEditing.Windows/Themes/PropertyEditorPanelStyle.xaml index dfac430..ad19e4a 100644 --- a/Xamarin.PropertyEditing.Windows/Themes/PropertyEditorPanelStyle.xaml +++ b/Xamarin.PropertyEditing.Windows/Themes/PropertyEditorPanelStyle.xaml @@ -72,7 +72,13 @@ <DataTemplate x:Key="PropertyGroupTemplate"> <local:CategoryExpander Header="{Binding Key,Mode=OneTime}" Style="{StaticResource TreeExpanderStyle}"> - <ItemsControl Style="{StaticResource PropertyListStyle}" ScrollViewer.CanContentScroll="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding}" /> + <ItemsControl Style="{StaticResource PropertyListStyle}" ItemsSource="{Binding}"> + <ItemsControl.Template> + <ControlTemplate> + <ItemsPresenter /> + </ControlTemplate> + </ItemsControl.Template> + </ItemsControl> </local:CategoryExpander> </DataTemplate> diff --git a/Xamarin.PropertyEditing/ViewModels/ResourceSelectorViewModel.cs b/Xamarin.PropertyEditing/ViewModels/ResourceSelectorViewModel.cs index 8bd6f2f..2c8d57e 100644 --- a/Xamarin.PropertyEditing/ViewModels/ResourceSelectorViewModel.cs +++ b/Xamarin.PropertyEditing/ViewModels/ResourceSelectorViewModel.cs @@ -154,10 +154,7 @@ namespace Xamarin.PropertyEditing.ViewModels return; } - if (this.resourcesView.Options.Filter != ResourceFilter) - this.resourcesView.Options.Filter = ResourceFilter; - else - this.resourcesView.UpdateFilter(); + this.resourcesView.Options.Filter = ResourceFilter; } private bool ResourceFilter (object item) diff --git a/Xamarin.PropertyEditing/ViewModels/SimpleCollectionView.cs b/Xamarin.PropertyEditing/ViewModels/SimpleCollectionView.cs index c0b2245..6c45857 100644 --- a/Xamarin.PropertyEditing/ViewModels/SimpleCollectionView.cs +++ b/Xamarin.PropertyEditing/ViewModels/SimpleCollectionView.cs @@ -71,9 +71,8 @@ namespace Xamarin.PropertyEditing.ViewModels get { return this.filter; } set { - if (this.filter == value) - return; - + // Purposefully doesn't check for existing equality since a common case is setting to the same delegate but + // variables it checks only have changed. this.filter = value; OnPropertyChanged(); } @@ -112,19 +111,6 @@ namespace Xamarin.PropertyEditing.ViewModels public bool IsFiltering => Options?.Filter != null; - /// <summary> - /// Forces an update of the contens as if the filter has changed. - /// </summary> - /// <remarks> - /// Some filters may not change their delegate, but that delegate may act different based on outside forces. - /// In that scenario, call this to trigger the update. - /// </remarks> - public void UpdateFilter() - { - FilterCore (isPureSubset: this.wasFilterNull); - this.wasFilterNull = Options.Filter == null; - } - public IEnumerator GetEnumerator () { bool haveChildren = (Options.ChildOptions != null); @@ -215,7 +201,8 @@ namespace Xamarin.PropertyEditing.ViewModels private void OnOptionsPropertyChanged (object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(SimpleCollectionViewOptions.Filter)) { - UpdateFilter(); + FilterCore (isPureSubset: this.wasFilterNull); + this.wasFilterNull = Options.Filter == null; } else Reset(); } @@ -288,7 +275,7 @@ namespace Xamarin.PropertyEditing.ViewModels if (Comparer.Compare (currentKey, key) > 0) { index = i; - this.filtered.Insert (i, key, this.arranged[i]); + this.filtered.Insert (i, key, this.arranged[key]); added = true; break; } |