在ListView Windows Phone中获取项目

在ListView Windows Phone中获取项目,listview,uwp,Listview,Uwp,我想在我的listview中选择项目。每次我在列表视图中选择项时,它总是获取最后一项。这是我的密码: XAML 代码隐藏 谢谢你的帮助,谢谢 更新: 人类 private string name; private string imagePath; private string contact; private string gender; public Person() { }

我想在我的listview中选择项目。每次我在列表视图中选择项时,它总是获取最后一项。这是我的密码:

XAML

代码隐藏

谢谢你的帮助,谢谢

更新:

人类

   private string name;
        private string imagePath;
        private string contact;
        private string gender;

        public Person()
        {

        }

        public String Name
        {
            get { return name; }
            set
            {
                name = value;
            }

        }

        public String Gender
        {
            get { return gender; }
            set
            {
                gender = value;
            }

        }

        public String ImagePath
        {
            get { return imagePath; }
            set
            {
                imagePath = value;
            }
        }

        public String Contact
        {
            get { return contact; }
            set
            {
                contact = value;
            }
        }
MainPage.cs

 Person person = new Person();
    public MainPage()
    {
        this.InitializeComponent();

        this.NavigationCacheMode = NavigationCacheMode.Required;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {

    }

    private void buttonAdd_Click(object sender, RoutedEventArgs e)
    {
        person.Name = textBoxName.Text.ToString();
        person.Contact = textBoxContact.Text.ToString();
        listViewDirectory.Items.Add(person);

        textBoxName.Text = "";
        textBoxContact.Text = "";
        radioButtonMale.IsChecked = false;
        radioButtonFemale.IsChecked = false;
        imageGender.Source = null;
    }

    private void radioButtonIsClicked(object sender, RoutedEventArgs e)
    {
        var selectedRadio = myStackPanel.Children.OfType<RadioButton>().FirstOrDefault(r => r.IsChecked == true);

        if (selectedRadio.Content.ToString().Equals("Male"))
        {
            imageGender.Source = new BitmapImage(new Uri(
       "ms-appx:///Assets/tiles/boy.png", UriKind.Absolute));
            person.ImagePath = "ms-appx:///Assets/tiles/boy.png";
            person.Gender = selectedRadio.Tag.ToString();
        }
        else if (selectedRadio.Content.ToString().Equals("Female"))
        {
            imageGender.Source = new BitmapImage(new Uri(
       "ms-appx:///Assets/tiles/girl.png", UriKind.Absolute));
            person.ImagePath = "ms-appx:///Assets/tiles/girl.png";
            person.Gender = selectedRadio.Tag.ToString();
        }
    }

    private void listViewDirectory_ItemClick(object sender, ItemClickEventArgs e)
    {
        Person obj = (Person)e.ClickedItem;

        Debug.WriteLine(obj.Name);


    }
Person-Person=新的Person();
公共主页()
{
this.InitializeComponent();
this.NavigationCacheMode=NavigationCacheMode.Required;
}
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
}
私有无效按钮单击(对象发送者,路由目标)
{
person.Name=textBoxName.Text.ToString();
person.Contact=textBoxContact.Text.ToString();
listViewDirectory.Items.Add(个人);
textBoxName.Text=”“;
textBoxContact.Text=”“;
radioButtonMale.IsChecked=false;
radioButtonFemale.IsChecked=false;
imageGender.Source=null;
}
私有void radioButtonIsClicked(对象发送方,RoutedEventArgs e)
{
var selectedRadio=myStackPanel.Children.OfType().FirstOrDefault(r=>r.IsChecked==true);
if(selectedRadio.Content.ToString().Equals(“男性”))
{
imageGender.Source=新位图图像(新Uri)(
“小姐-appx:///Assets/tiles/boy.png“,UriKind.Absolute”);
person.ImagePath=“ms-appx:///Assets/tiles/boy.png";
person.Gender=selectedRadio.Tag.ToString();
}
else if(selectedRadio.Content.ToString().Equals(“女性”))
{
imageGender.Source=新位图图像(新Uri)(
“小姐-appx:///Assets/tiles/girl.png“,UriKind.Absolute”);
person.ImagePath=“ms-appx:///Assets/tiles/girl.png";
person.Gender=selectedRadio.Tag.ToString();
}
}
private void listViewDirectory_ItemClick(对象发送者,ItemClickEventArgs e)
{
Person obj=(Person)e.ClickedItem;
Debug.WriteLine(对象名);
}

我不建议这样做。不要使用ListView的
点击事件来选择项目。为什么不直接使用
ItemClick
event

首先,在
XAML
上启用
列表视图的
IsItemClickEnabled
。将其从false设置为true。然后添加
项单击
事件

private void ListView_ItemClick(object sender, ItemClickEventArgs e)
{
   //Use e.ClickedItem to get the data;
}

希望有帮助

正如@mindOfAi所说,您应该能够使用
ItemClick
事件。当列表视图中的某个项目接收到交互,并且IsItemClickEnabled属性为true时,就会发生该事件。我们可以通过属性获取项目

从您发布的代码来看,似乎您定义了一个person实例,并通过ButtonAd_Click事件设置了数据。我们找不到您在哪里设置
列表视图

您应该能够将person对象添加到集合中,我们可以将集合设置为
Itemsource
。然后我们可以通过
ItemClick
事件获得
ClickedItem

private void ListView_ItemClick(object sender, ItemClickEventArgs e)
{
   //Use e.ClickedItem to get the data;
}
例如:

private ObservableCollection<Person> Persons;

public MainPage()
{
    this.InitializeComponent();
    this.NavigationCacheMode = NavigationCacheMode.Required;
    Persons = new ObservableCollection<Person>();

    for (int i = 0; i < 10; i++)
    {
        Persons.Add(new Person());
        Persons[i].Contact = "Contact" + i;
        Persons[i].Gender = "Gender" + i;
        Persons[i].ImagePath = "ms - appx:///Assets/tiles/boy.png";
        Persons[i].Name = "Name" + i;
    }
    listViewDirectory.ItemsSource = Persons;
}
私人可观察收集人员;
公共主页()
{
this.InitializeComponent();
this.NavigationCacheMode=NavigationCacheMode.Required;
人员=新的可观察集合();
对于(int i=0;i<10;i++)
{
添加(新的Person());
人员[i].Contact=“Contact”+i;
人[i].Gender=“Gender”+i;
Persons[i].ImagePath=“ms-appx:///Assets/tiles/boy.png";
人员[i].Name=“Name”+i;
}
listViewDirectory.ItemsSource=个人;
}

请复制/粘贴您的代码,并使用SO标记编辑器对其进行格式化。是否尝试删除ListView中的所有scrollviewer属性?可能是因为problem@HelloWindowsPhone:否,每次单击项目时,我都需要从列表视图中获取值。但是,我总是从列表视图中获取最后一个值。谢谢@mindOfAi。我已经试过了,但仍然得到了listview中的最后一项。这很奇怪。添加
项click
后是否删除了
点击的
事件?是的,我已经删除了它。我不知道为什么它总是给出我列表视图中的最后一项:(你也能分享你的数据吗?谢谢。我看你的代码tbh没有任何问题(如果你已经将其更改为
ItemClick
。谢谢你的回答@Jayden Gu-MSFT。我在我的代码中添加了ObservableCollection,它解决了我的问题。干杯(Y)