Attempts to get horizontal list to work
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.Specialized;
|
||||
using System.Windows.Input;
|
||||
using Xamarin.Forms;
|
||||
|
||||
@ -13,6 +14,7 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
private readonly StackLayout _itemsStackLayout;
|
||||
|
||||
public event EventHandler SelectedItemChanged;
|
||||
private NotifyCollectionChangedEventHandler _itemsChangedHandler;
|
||||
|
||||
public StackOrientation ListOrientation { get; set; }
|
||||
|
||||
@ -22,7 +24,12 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
BindableProperty.Create("SelectedCommand", typeof(ICommand), typeof(HorizontalList), null);
|
||||
|
||||
public static readonly BindableProperty ItemsSourceProperty =
|
||||
BindableProperty.Create("ItemsSource", typeof(IEnumerable), typeof(HorizontalList), default(IEnumerable<object>), BindingMode.TwoWay, propertyChanged: ItemsSourceChanged);
|
||||
BindableProperty.Create("ItemsSource",
|
||||
typeof(ObservableCollection<object>),
|
||||
typeof(HorizontalList),
|
||||
default(ObservableCollection<object>),
|
||||
BindingMode.TwoWay,
|
||||
propertyChanged: ItemsSourceChanged);
|
||||
|
||||
public static readonly BindableProperty SelectedItemProperty =
|
||||
BindableProperty.Create("SelectedItem", typeof(object), typeof(HorizontalList), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
|
||||
@ -36,9 +43,9 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
set { SetValue(SelectedCommandProperty, value); }
|
||||
}
|
||||
|
||||
public IEnumerable ItemsSource
|
||||
public ObservableCollection<object> ItemsSource
|
||||
{
|
||||
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
|
||||
get { return (ObservableCollection<object>)GetValue(ItemsSourceProperty); }
|
||||
set { SetValue(ItemsSourceProperty, value); }
|
||||
}
|
||||
|
||||
@ -56,12 +63,13 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
|
||||
private static void ItemsSourceChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var itemsLayout = (HorizontalList)bindable;
|
||||
HorizontalList itemsLayout = bindable as HorizontalList;
|
||||
itemsLayout.SetItems();
|
||||
}
|
||||
|
||||
public HorizontalList()
|
||||
{
|
||||
_itemsChangedHandler = OnItemsChanged;
|
||||
// BackgroundColor = Color.FromHex("#1E2634");
|
||||
Spacing = 6;
|
||||
_scrollView = new ScrollView();
|
||||
@ -78,6 +86,11 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
Children.Add(_scrollView);
|
||||
}
|
||||
|
||||
~HorizontalList()
|
||||
{
|
||||
ItemsSource.CollectionChanged -= _itemsChangedHandler;
|
||||
}
|
||||
|
||||
protected virtual void SetItems()
|
||||
{
|
||||
_itemsStackLayout.Children.Clear();
|
||||
@ -99,6 +112,9 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
return;
|
||||
}
|
||||
|
||||
//Setup collection events
|
||||
ItemsSource.CollectionChanged += _itemsChangedHandler;
|
||||
|
||||
foreach (var item in ItemsSource)
|
||||
{
|
||||
_itemsStackLayout.Children.Add(GetItemView(item));
|
||||
@ -127,7 +143,6 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
};
|
||||
|
||||
AddGesture(view, gesture);
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@ -164,5 +179,33 @@ namespace Aurora.Design.Components.HorizontalList
|
||||
itemsView.SelectedCommand?.Execute(newValue);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnItemsChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
switch (e.Action)
|
||||
{
|
||||
case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
|
||||
{
|
||||
foreach (object item in e.NewItems)
|
||||
{
|
||||
_itemsStackLayout.Children.Add(GetItemView(item));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:
|
||||
{
|
||||
foreach (object item in e.OldItems)
|
||||
{
|
||||
//Clear layout and rebuild
|
||||
_itemsStackLayout.Children.Clear();
|
||||
foreach (var source in ItemsSource)
|
||||
{
|
||||
_itemsStackLayout.Children.Add(GetItemView(item));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -57,7 +57,7 @@ namespace Aurora.Design.Components.MemberList
|
||||
if (membersList != null)
|
||||
{
|
||||
_newSource = newValue as ObservableCollection<PartyMember>;
|
||||
membersList.ItemsSource = newValue as ObservableCollection<PartyMember>;
|
||||
membersList.ItemsSource = newValue as ObservableCollection<object>;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,8 @@
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:hs="clr-namespace:Aurora.Design.Components.HostSelector"
|
||||
xmlns:ml="clr-namespace:Aurora.Design.Components.MemberList"
|
||||
xmlns:hl="clr-namespace:Aurora.Design.Components.HorizontalList"
|
||||
xmlns:renderedViews="clr-namespace:Sharpnado.Presentation.Forms.RenderedViews;assembly=Sharpnado.Presentation.Forms"
|
||||
xmlns:qu="clr-namespace:Aurora.Design.Components.Queue"
|
||||
x:Class="Aurora.Design.Views.Party.PartyView">
|
||||
<ContentView.Content>
|
||||
@ -17,9 +18,20 @@
|
||||
IsVisible="{Binding IsNotSelectingHost}">
|
||||
<Label
|
||||
Text="Party Members"/>
|
||||
<ml:MemberList
|
||||
VerticalOptions="FillAndExpand"
|
||||
Members="{Binding Members}"/>
|
||||
<hl:HorizontalList
|
||||
x:Name="MembersHorizontalList"
|
||||
ListOrientation="Horizontal"
|
||||
VerticalOptions="Start"
|
||||
ItemsSource="{Binding Members}">
|
||||
<hl:HorizontalList.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<Frame>
|
||||
<Label
|
||||
Text="{Binding UserName}"/>
|
||||
</Frame>
|
||||
</DataTemplate>
|
||||
</hl:HorizontalList.ItemTemplate>
|
||||
</hl:HorizontalList>
|
||||
<Label
|
||||
Text="Queue"/>
|
||||
<qu:Queue/>
|
||||
|
@ -28,7 +28,11 @@ namespace Aurora.Design.Views.Party
|
||||
{
|
||||
this.JoinCommand = new Command(OnJoinExecute, CanJoinExecute);
|
||||
this.HostCommand = new Command(OnHostExecute, CanHostExecute);
|
||||
_members = new ObservableCollection<PartyMember>();
|
||||
_members = new ObservableCollection<PartyMember>
|
||||
{
|
||||
new PartyMember{UserName = "asdf"}
|
||||
};
|
||||
|
||||
|
||||
State(PartyState.SelectingHost);
|
||||
}
|
||||
@ -49,7 +53,10 @@ namespace Aurora.Design.Views.Party
|
||||
{
|
||||
return _members;
|
||||
}
|
||||
set { SetProperty(ref _members, value); }
|
||||
set
|
||||
{
|
||||
SetProperty(ref _members, value);
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsSelectingHost
|
||||
@ -87,7 +94,8 @@ namespace Aurora.Design.Views.Party
|
||||
_executor = BaseExecutor.CreateExecutor<ClientExecutor>();
|
||||
_executor.Connect(this.Hostname);
|
||||
|
||||
SetUpMembers();
|
||||
SetupMembersCollection();
|
||||
OnPropertyChanged("Members");
|
||||
|
||||
State(PartyState.Connecting);
|
||||
}
|
||||
@ -104,7 +112,8 @@ namespace Aurora.Design.Views.Party
|
||||
_executor = BaseExecutor.CreateExecutor<HostExecutor>();
|
||||
_executor.Connect(this.Hostname);
|
||||
|
||||
SetUpMembers();
|
||||
SetupMembersCollection();
|
||||
OnPropertyChanged("Members");
|
||||
|
||||
//Change state
|
||||
State(PartyState.Connecting);
|
||||
@ -118,18 +127,41 @@ namespace Aurora.Design.Views.Party
|
||||
|
||||
#endregion Commands
|
||||
|
||||
private void SetUpMembers()
|
||||
private void SetupMembersCollection()
|
||||
{
|
||||
_members = _executor.PartyMembers;
|
||||
OnPropertyChanged("Members");
|
||||
_executor.PartyMembers.CollectionChanged += (sender, e) =>
|
||||
if (_executor != null)
|
||||
{
|
||||
if (_executor != null)
|
||||
foreach (PartyMember member in _executor.PartyMembers)
|
||||
{
|
||||
_members = _executor.PartyMembers;
|
||||
_members.Add(member);
|
||||
}
|
||||
OnPropertyChanged("Members");
|
||||
};
|
||||
|
||||
//Setup events
|
||||
_executor.PartyMembers.CollectionChanged += (sender, e) =>
|
||||
{
|
||||
switch (e.Action)
|
||||
{
|
||||
case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
|
||||
{
|
||||
foreach (PartyMember member in e.NewItems)
|
||||
{
|
||||
Members.Add(member);
|
||||
OnPropertyChanged("Members");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:
|
||||
{
|
||||
foreach (PartyMember member in e.OldItems)
|
||||
{
|
||||
Members.Remove(member);
|
||||
OnPropertyChanged("Members");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user