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