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.ComponentModel;
using Avalonia.Collections;
using Avalonia.Controls.Primitives;
using Avalonia.Controls.Templates;
using Avalonia.Metadata;
@ -12,17 +11,15 @@ namespace Avalonia.Controls
{
public MenuFlyout()
{
_items = new AvaloniaList<object>();
Items = new ItemCollection();
}
/// <summary>
/// Defines the <see cref="Items"/> property
/// Defines the <see cref="ItemsSource"/> property
/// </summary>
public static readonly DirectProperty<MenuFlyout, IEnumerable?> ItemsProperty =
AvaloniaProperty.RegisterDirect<MenuFlyout, IEnumerable?>(
nameof(Items),
x => x.Items,
(x, v) => x.Items = v);
public static readonly StyledProperty<IEnumerable?> ItemsSourceProperty =
AvaloniaProperty.Register<MenuFlyout, IEnumerable?>(
nameof(ItemsSource));
/// <summary>
/// Defines the <see cref="ItemTemplate"/> property
@ -45,14 +42,16 @@ namespace Avalonia.Controls
public Classes FlyoutPresenterClasses => _classes ??= new Classes();
[Content]
public ItemCollection Items { get; }
/// <summary>
/// Gets or sets the items of the MenuFlyout
/// </summary>
[Content]
public IEnumerable? Items
public IEnumerable? ItemsSource
{
get => _items;
set => SetAndRaise(ItemsProperty, ref _items, value);
get => GetValue(ItemsSourceProperty);
set => SetValue(ItemsSourceProperty, value);
}
/// <summary>
@ -83,14 +82,13 @@ namespace Avalonia.Controls
}
private Classes? _classes;
private IEnumerable? _items;
private IDataTemplate? _itemTemplate;
protected override Control CreatePresenter()
{
return new MenuFlyoutPresenter
{
[!ItemsControl.ItemsSourceProperty] = this[!ItemsProperty],
ItemsSource = Items,
[!ItemsControl.ItemTemplateProperty] = this[!ItemTemplateProperty],
[!ItemsControl.ItemContainerThemeProperty] = this[!ItemContainerThemeProperty],
};
@ -113,5 +111,13 @@ namespace Avalonia.Controls
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
{
ItemsSourceView => throw new ArgumentException("Cannot wrap an existing ItemsSourceView.", nameof(source)),
ItemsSourceView isv => isv.Source,
IList list => list,
INotifyCollectionChanged => throw new ArgumentException(
"Collection implements INotifyCollectionChanged but not IList.",

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

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

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

@ -230,7 +230,7 @@ namespace Avalonia.Controls.UnitTests
return true;
});
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 window = new Window { Content = button };
window.ApplyStyling();

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

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

Loading…
Cancel
Save