Browse Source

MenuFlyout.Items -> ItemsSource.

pull/10831/head
Steven Kirk 3 years ago
parent
commit
e77d6cc294
  1. 34
      src/Avalonia.Controls/Flyouts/MenuFlyout.cs
  2. 2
      src/Avalonia.Controls/ItemsSourceView.cs
  3. 2
      tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs
  4. 2
      tests/Avalonia.Controls.UnitTests/MenuItemTests.cs
  5. 2
      tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

34
src/Avalonia.Controls/Flyouts/MenuFlyout.cs

@ -1,6 +1,5 @@
using System.Collections; using System.Collections;
using System.ComponentModel; using System.ComponentModel;
using Avalonia.Collections;
using Avalonia.Controls.Primitives; using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates; using Avalonia.Controls.Templates;
using Avalonia.Metadata; using Avalonia.Metadata;
@ -12,17 +11,15 @@ namespace Avalonia.Controls
{ {
public MenuFlyout() public MenuFlyout()
{ {
_items = new AvaloniaList<object>(); Items = new ItemCollection();
} }
/// <summary> /// <summary>
/// Defines the <see cref="Items"/> property /// Defines the <see cref="ItemsSource"/> property
/// </summary> /// </summary>
public static readonly DirectProperty<MenuFlyout, IEnumerable?> ItemsProperty = public static readonly StyledProperty<IEnumerable?> ItemsSourceProperty =
AvaloniaProperty.RegisterDirect<MenuFlyout, IEnumerable?>( AvaloniaProperty.Register<MenuFlyout, IEnumerable?>(
nameof(Items), nameof(ItemsSource));
x => x.Items,
(x, v) => x.Items = v);
/// <summary> /// <summary>
/// Defines the <see cref="ItemTemplate"/> property /// Defines the <see cref="ItemTemplate"/> property
@ -45,14 +42,16 @@ namespace Avalonia.Controls
public Classes FlyoutPresenterClasses => _classes ??= new Classes(); public Classes FlyoutPresenterClasses => _classes ??= new Classes();
[Content]
public ItemCollection Items { get; }
/// <summary> /// <summary>
/// Gets or sets the items of the MenuFlyout /// Gets or sets the items of the MenuFlyout
/// </summary> /// </summary>
[Content] public IEnumerable? ItemsSource
public IEnumerable? Items
{ {
get => _items; get => GetValue(ItemsSourceProperty);
set => SetAndRaise(ItemsProperty, ref _items, value); set => SetValue(ItemsSourceProperty, value);
} }
/// <summary> /// <summary>
@ -83,14 +82,13 @@ namespace Avalonia.Controls
} }
private Classes? _classes; private Classes? _classes;
private IEnumerable? _items;
private IDataTemplate? _itemTemplate; private IDataTemplate? _itemTemplate;
protected override Control CreatePresenter() protected override Control CreatePresenter()
{ {
return new MenuFlyoutPresenter return new MenuFlyoutPresenter
{ {
[!ItemsControl.ItemsSourceProperty] = this[!ItemsProperty], ItemsSource = Items,
[!ItemsControl.ItemTemplateProperty] = this[!ItemTemplateProperty], [!ItemsControl.ItemTemplateProperty] = this[!ItemTemplateProperty],
[!ItemsControl.ItemContainerThemeProperty] = this[!ItemContainerThemeProperty], [!ItemsControl.ItemContainerThemeProperty] = this[!ItemContainerThemeProperty],
}; };
@ -113,5 +111,13 @@ namespace Avalonia.Controls
base.OnOpening(args); base.OnOpening(args);
} }
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);
if (change.Property == ItemsSourceProperty)
Items.SetItemsSource(change.GetNewValue<IEnumerable?>());
}
} }
} }

2
src/Avalonia.Controls/ItemsSourceView.cs

@ -262,7 +262,7 @@ namespace Avalonia.Controls
_source = source switch _source = source switch
{ {
ItemsSourceView => throw new ArgumentException("Cannot wrap an existing ItemsSourceView.", nameof(source)), ItemsSourceView isv => isv.Source,
IList list => list, IList list => list,
INotifyCollectionChanged => throw new ArgumentException( INotifyCollectionChanged => throw new ArgumentException(
"Collection implements INotifyCollectionChanged but not IList.", "Collection implements INotifyCollectionChanged but not IList.",

2
tests/Avalonia.Controls.UnitTests/MaskedTextBoxTests.cs

@ -72,7 +72,7 @@ namespace Avalonia.Controls.UnitTests
Text = "1234", Text = "1234",
ContextFlyout = new MenuFlyout ContextFlyout = new MenuFlyout
{ {
Items = new List<MenuItem> Items =
{ {
new MenuItem { Header = "Item 1" }, new MenuItem { Header = "Item 1" },
new MenuItem {Header = "Item 2" }, new MenuItem {Header = "Item 2" },

2
tests/Avalonia.Controls.UnitTests/MenuItemTests.cs

@ -230,7 +230,7 @@ namespace Avalonia.Controls.UnitTests
return true; return true;
}); });
var target = new MenuItem(); var target = new MenuItem();
var flyout = new MenuFlyout { Items = new AvaloniaList<MenuItem> { target } }; var flyout = new MenuFlyout { Items = { target } };
var button = new Button { Flyout = flyout }; var button = new Button { Flyout = flyout };
var window = new Window { Content = button }; var window = new Window { Content = button };
window.ApplyStyling(); window.ApplyStyling();

2
tests/Avalonia.Controls.UnitTests/TextBoxTests.cs

@ -93,7 +93,7 @@ namespace Avalonia.Controls.UnitTests
Text = "1234", Text = "1234",
ContextFlyout = new MenuFlyout ContextFlyout = new MenuFlyout
{ {
Items = new List<MenuItem> Items =
{ {
new MenuItem { Header = "Item 1" }, new MenuItem { Header = "Item 1" },
new MenuItem {Header = "Item 2" }, new MenuItem {Header = "Item 2" },

Loading…
Cancel
Save