首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >xamarin表单:滑动以删除

xamarin表单:滑动以删除
EN

Stack Overflow用户
提问于 2016-03-01 22:21:01
回答 1查看 4.1K关注 0票数 2

如何在我的笔记列表am中添加要删除的卷帘。我正在使用xamarin表单。我在xamarin表单样本中搜索过,但没有找到它。我还用menuItem等工具尝试了列表、视图、性能等选项,但我不知道如何在代码中进行调整。有没有人能帮我一下?我的代码如下:

代码语言:javascript
复制
public partial class MyPage
{
    List<Note> notes;
    string NotesFile {
        get {
            var documents = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
            return System.IO.Path.Combine (documents, "notes.json");
        }
    }
    public MyPage()
    {
        BuildContent();
        LoadNotes ();
        ReloadListContents ();

        AddNoteButton.Clicked += (sender, args) => {
            var note = new Note("typ...");
            notes.Add(note);
            EditNote(note);
        };

        NoteListView.ItemTapped += (sender, row) =>
        {
            NoteListView.SelectedItem = null;
            Note note = (Note)row.Item;
            EditNote(note);
        };

        buttonDelete.Clicked += (sender, args) =>{
            notes.RemoveAt(0);
            DisplayAlert("Delete", "Row deleted", "OK");
        };
    }

} MyPage.cs

代码语言:javascript
复制
{
    public ListView NoteListView = new ListView ();
    public Button AddNoteButton;
    public Button buttonDelete;
    private void BuildContent() 
    {
        AddNoteButton = new Button
        {
            Text = "Add New Note",
            TextColor = Color.White,
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.Center
        };
        buttonDelete = new Button
        {
            Text = "Delete Note ",
            TextColor = Color.White,
            HorizontalOptions = LayoutOptions.Center,
            VerticalOptions = LayoutOptions.Center
        };

        Content = new StackLayout
        {
            BackgroundColor = Color.Black,
            Children = {
                new Label {
                    Text = "Note Taker",
                    TextColor = Color.White
                },
                NoteListView,
                AddNoteButton,
                buttonDelete
            }
        };
    }
EN

回答 1

Stack Overflow用户

发布于 2018-12-19 06:20:58

我正在用CS代码而不是XAML (我更喜欢)回答这个问题,如果有人想要Xaml响应,请在下面留言,我将在CS旁边写XAML。

因此,要完成在Xamarin.Forms中对ListView元素提出的要求,必须首先创建ViewCell,以便在ListView中的每个单元格中显示数据,并为其提供上下文操作。下面是一个示例:

代码语言:javascript
复制
   public class CustomViewCell : ViewCell
        {
            public CustomViewCell()
            {
                //instantiate each element we want to use.
                var image = new CircleCachedImage
                {
                    Margin = new Thickness(20, 10, 0, 10),
                    WidthRequest = App.ScreenWidth * 0.15,
                    HeightRequest = App.ScreenWidth * 0.15,
                    Aspect = Aspect.AspectFill,
                    BorderColor = Color.FromHex(App.PrimaryColor),
                    BorderThickness = 2,
                    HorizontalOptions = LayoutOptions.Center
                };
                var nameLabel = new Label
                {
                    Margin = new Thickness(20, 15, 0, 0),
                    FontFamily = "Lato",
                    FontAttributes = FontAttributes.Bold,
                    FontSize = 17
                };
                var locationLabel = new Label
                {
                    Margin = new Thickness(20, 0, 0, 5),
                    FontFamily = "Lato",
                    FontSize = 13
                };
                //Create layout
                var verticaLayout = new StackLayout();
                var horizontalLayout = new StackLayout() { BackgroundColor = Color.White };

                //set bindings
                nameLabel.SetBinding(Label.TextProperty, new Binding("Name"));
                locationLabel.SetBinding(Label.TextProperty, new Binding("Location"));
                image.SetBinding(CircleCachedImage.SourceProperty, new Binding("Image"));

                //Set properties for desired design
                horizontalLayout.Orientation = StackOrientation.Horizontal;
                horizontalLayout.HorizontalOptions = LayoutOptions.Fill;
                image.HorizontalOptions = LayoutOptions.End;


                //add views to the view hierarchy
                horizontalLayout.Children.Add(image);
                verticaLayout.Children.Add(nameLabel);
                verticaLayout.Children.Add(locationLabel);
                horizontalLayout.Children.Add(verticaLayout);

                //HERE IS THE MOST IMPORTANT PART
                var deleteAction = new MenuItem { Text = "Delete", IsDestructive = true }; // red background


                deleteAction.Clicked += async (sender, e) => {
                    //Here do your deleting / calling to WebAPIs
                    //Now remove the item from the list. You can do this by sending an event using messaging center looks like: 
                    //MessagingCenter.Send<TSender,string>(TSender sender, string message, string indexOfItemInListview)
                };
                // add to the ViewCell's ContextActions property
                ContextActions.Add(deleteAction);

                // add to parent view
                View = horizontalLayout;
            }
        }

现在,您必须对ListView执行以下操作:

代码语言:javascript
复制
listView = new ListView();
lstView.ItemTemplate = new DataTemplate(typeof(CustomViewCell));

在您拥有ListView的同一个Content Page中,您还必须向MessagingCenter提供子电路,以侦听与上面在自定义视图单元格中设置的相同参数。如果您以前没有使用过MessagingCenter,请阅读提供的链接。在此方法内部,您必须从列表视图中删除该项,并将索引发送到此方法。

如果任何人需要任何进一步的解释,请在下面发表评论,我将编辑这篇文章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35725383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档