diff options
Diffstat (limited to 'Xamarin.Forms.Controls/GalleryPages/EditableList.cs')
-rw-r--r-- | Xamarin.Forms.Controls/GalleryPages/EditableList.cs | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls/GalleryPages/EditableList.cs b/Xamarin.Forms.Controls/GalleryPages/EditableList.cs new file mode 100644 index 00000000..2a7b1a85 --- /dev/null +++ b/Xamarin.Forms.Controls/GalleryPages/EditableList.cs @@ -0,0 +1,116 @@ +using System.Collections.ObjectModel; +using System.Windows.Input; +using System.Linq; + +namespace Xamarin.Forms.Controls +{ + internal class MessagesViewModel : ViewModelBase + { + public MessagesViewModel() + { + Messages = new ObservableCollection<MessageViewModel> (Enumerable.Range (0, 100).Select (i => { + return new MessageViewModel { Subject = "Subject Line " + i, MessagePreview = "Lorem ipsum dolorem monkeys bonkers " + i }; + })); + + MessagingCenter.Subscribe<MessageViewModel, MessageViewModel> (this, "DeleteMessage", (vm, vm2) => { + Messages.Remove (vm); + }); + } + + public ObservableCollection<MessageViewModel> Messages + { + get; + private set; + } + } + + [Preserve (AllMembers = true)] + internal class MessageViewModel : ViewModelBase + { + public MessageViewModel() + { + Delete = new Command (() => MessagingCenter.Send (this, "DeleteMessage", this)); + Move = new Command (() => MessagingCenter.Send (this, "MoveMessage", this)); + } + + public string Subject + { + get; + set; + } + + public string MessagePreview + { + get; + set; + } + + public ICommand Delete + { + get; + private set; + } + + public ICommand Move + { + get; + private set; + } + } + + internal class ContextActionsGallery : ContentPage + { + class MessageCell : TextCell + { + public MessageCell() + { + this.SetBinding (TextProperty, "Subject"); + this.SetBinding (DetailProperty, "MessagePreview"); + + var delete = new MenuItem { Text = "Delete", IsDestructive = true }; + delete.SetBinding (MenuItem.CommandProperty, "Delete"); + + var mark = new MenuItem { Text = "Mark", Icon = "calculator.png" }; + var move = new MenuItem { Text = "Move" }; + + //move.Clicked += async (sender, e) => await Navigation.PopAsync(); + + ContextActions.Add (mark); + ContextActions.Add (delete); + ContextActions.Add (move); + + var clear = new MenuItem { Text = "Clear Items" }; + clear.Clicked += (sender, args) => ContextActions.Clear(); + ContextActions.Add (clear); + } + } + + public ContextActionsGallery (bool tableView = false) + { + BindingContext = new MessagesViewModel(); + + View list; + if (!tableView) { + list = new ListView(); + list.SetBinding (ListView.ItemsSourceProperty, "Messages"); + ((ListView)list).ItemTemplate = new DataTemplate (typeof (MessageCell)); + } else { + var section = new TableSection(); + section.Add (new TextCell { Text = "I have no ContextActions", Detail = "Sup" }); + foreach (var msg in ((MessagesViewModel) BindingContext).Messages) { + section.Add (new MessageCell { BindingContext = msg }); + } + + list = new TableView(); + ((TableView)list).Root = new TableRoot { section }; + } + + Content = new StackLayout { + Children = { + new Label { Text = "Email" }, + list + } + }; + } + } +} |