Xamarin.forms 交换项目2 listview xamarin表单

Xamarin.forms 交换项目2 listview xamarin表单,xamarin.forms,Xamarin.forms,因此,基本上我必须将一个项目从一个列表视图移动到另一个列表视图,位置就是您使用xamarin.forms点击的位置 我现在的想法是交换他们的价值观 但问题是我根本不理解xamarin 如果你问我为什么要和xamarin一起工作,那么答案是我的队友想要xamarin,所以我完蛋了 我试着做一些关于物品点击之类的文档和教程,但我认为我检查的方向是错误的 所以,如果有人能告诉我,为了让代码像那样工作,我实际上需要学习和做些什么 我很感激从Xamarin开始有时会很棘手,但我相信你会在一些教程之后掌握窍

因此,基本上我必须将一个项目从一个列表视图移动到另一个列表视图,位置就是您使用xamarin.forms点击的位置

我现在的想法是交换他们的价值观

但问题是我根本不理解xamarin 如果你问我为什么要和xamarin一起工作,那么答案是我的队友想要xamarin,所以我完蛋了

我试着做一些关于物品点击之类的文档和教程,但我认为我检查的方向是错误的

所以,如果有人能告诉我,为了让代码像那样工作,我实际上需要学习和做些什么


我很感激

从Xamarin开始有时会很棘手,但我相信你会在一些教程之后掌握窍门

假设您使用的是XAML,我相信以下内容应该会对您有所帮助:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             x:Class="Test.MultiListView">
    <StackLayout Orientation="Horizontal" HorizontalOptions="FillAndExpand">
        <ListView x:Name="ListOneListView" HorizontalOptions="FillAndExpand" ItemsSource="{Binding ListOne}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Title}" />
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
            <Button HorizontalOptions="FillAndExpand" Text="Add" Clicked="Add" VerticalOptions="Center" />
            <Button HorizontalOptions="FillAndExpand" Text="Remove" Clicked="Remove" VerticalOptions="Center" />
        </StackLayout>
        <ListView x:Name="ListTwoListView" HorizontalOptions="FillAndExpand" ItemsSource="{Binding ListTwo}" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Label Text="{Binding Title}" />
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage>

代码背后:

using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Globalization;
using Xamarin.Forms;

namespace Test
{
    public partial class MultiListView : ContentPage
    {
        MultiListViewVM vm;

        public MultiListView()
        {
            vm = new MultiListViewVM();
            InitializeComponent();
            BindingContext = vm;
        }

        public void Add(object sender, EventArgs e)
        {
            if(ListOneListView.SelectedItem == null)
            {
                return;
            }

            vm.ListTwo.Add(ListOneListView.SelectedItem as ListItem);
            vm.ListOne.Remove(ListOneListView.SelectedItem as ListItem);

            ListOneListView.SelectedItem = null;
        }

        public void Remove(object sender, EventArgs e)
        {
            if(ListTwoListView.SelectedItem == null)
            {
                return;
            }

            vm.ListOne.Add(ListTwoListView.SelectedItem as ListItem);
            vm.ListTwo.Remove(ListTwoListView.SelectedItem as ListItem);

            ListTwoListView.SelectedItem = null;
        }
    }

    class MultiListViewVM : INotifyPropertyChanged
    {
        private ObservableCollection<ListItem> listOne;
        private ObservableCollection<ListItem> listTwo;

        public ObservableCollection<ListItem> ListOne
        {
            get
            {
                return listOne;
            }
            set
            {
                listOne = value;
                OnPropertyChanged("ListOne");
            }
        }

        public ObservableCollection<ListItem> ListTwo
        {
            get
            {
                return listTwo;
            }
            set
            {
                listTwo = value;
                OnPropertyChanged("ListTwo");
            }
        }

        public MultiListViewVM()
        {
            ListOne = new ObservableCollection<ListItem>();
            ListTwo = new ObservableCollection<ListItem>();

            SetupData();
        }

        private void SetupData()
        {
            for (int i = 0; i < 7; i++)
            {
                var dayName = new CultureInfo("en-US").DateTimeFormat.GetDayName((DayOfWeek)i);
                var item = new ListItem(dayName, "Description");
                ListOne.Add(item);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string prop)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
        }
    }

    class ListItem
    {
        public string Title { get; set; }
        public string Description { get; set; }

        public ListItem(string title, string description)
        {
            Title = title;
            Description = description;
        }
    }
}
使用系统;
使用System.Collections.ObjectModel;
使用系统组件模型;
利用制度全球化;
使用Xamarin.Forms;
名称空间测试
{
公共部分类MultiListView:ContentPage
{
多列表视图虚拟机;
公共多列表视图()
{
vm=新的MultiListViewVM();
初始化组件();
BindingContext=vm;
}
public void Add(对象发送方、事件参数)
{
if(ListOneListView.SelectedItem==null)
{
返回;
}
添加(ListOneListView.SelectedItem作为ListItem);
vm.ListOne.Remove(ListOneListView.SelectedItem作为ListItem);
ListOneListView.SelectedItem=null;
}
公共无效删除(对象发送方,事件参数)
{
如果(ListTwoListView.SelectedItem==null)
{
返回;
}
添加(ListTwoListView.SelectedItem作为ListItem);
vm.ListTwo.Remove(ListTwoListView.SelectedItem作为ListItem);
ListTwoListView.SelectedItem=null;
}
}
类MultiListViewVM:INotifyPropertyChanged
{
私有可观察收集列表;
私人可观察收集清单2;
公共可观测收集列表一
{
得到
{
返回列表一;
}
设置
{
listOne=值;
OnPropertyChanged(“ListOne”);
}
}
公共可观测收集列表二
{
得到
{
返回列表2;
}
设置
{
listTwo=值;
OnPropertyChanged(“列表二”);
}
}
公共MultiListViewVM()
{
ListOne=新的ObservableCollection();
ListTwo=新的ObservableCollection();
SetupData();
}
私有void SetupData()
{
对于(int i=0;i<7;i++)
{
var dayName=new CultureInfo(“en-US”).DateTimeFormat.GetDayName((DayOfWeek)i);
var项目=新列表项目(dayName,“描述”);
列表一。添加(项目);
}
}
公共事件属性更改事件处理程序属性更改;
公共无效OnPropertyChanged(字符串属性)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(prop));
}
}
类列表项
{
公共字符串标题{get;set;}
公共字符串说明{get;set;}
公共列表项(字符串标题、字符串描述)
{
头衔=头衔;
描述=描述;
}
}
}

希望这很容易理解。

我想我明白了。。。但我也需要把名单上的位置作为目标。。。我可以通过添加第三个隐藏列表来实现我认为。。。thx现在有很多,只是想弄清楚如何把它放在选定的位置上。。。