2017-02-27 52 views
0

我想要在我的列表視圖中選擇項目。每當我在列表視圖中選擇項目時,它總是獲取最後一個項目。這裏是我的代碼:在ListView中獲取項目Windows Phone

XAML

enter image description here

代碼隱藏

enter image description here

感謝您的幫助,謝謝。

更新時間:

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); 


    } 
+1

請複製/粘貼代碼,並使用SO標記編輯器進行格式化。 –

+0

您是否嘗試刪除ListView中的所有滾動查看器屬性?可能會導致問題 – HelloWindowsPhone

+0

@HelloWindowsPhone:不,我需要從列表視圖中獲取值,只要我點擊該項目。但是,我總是從列表視圖中獲取最後一個值。 – AppDev

回答

0

正如@mindOfAi所說,您應該可以使用ItemClick事件。當列表視圖中的項目接收到交互並且IsItemClickEnabled屬性爲true時,就會發生這種情況。我們可以通過ItemClickEventArgs.ClickedItem屬性獲取物品。

從您發佈的代碼看來,您定義了一個人員實例,並通過buttonAdd_Click事件來設置數據。我們無法找到您在哪裏設置ListViewItemsource

您應該可以將人物對象添加到集合中,並且我們可以將集合設置爲Itemsource。然後我們可以通過ItemClick事件得到ClickedItem

例如:

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; 
} 
+0

感謝您的回答@Jayden Gu - MSFT。我在代碼中添加了ObservableCollection,它解決了我的問題。乾杯(Y) – AppDev

0

我不會推薦。不要使用ListView的Tapped事件進行項目選擇。爲什麼不使用ItemClick事件?

首先,啓用ListViewXAMLIsItemClickEnabled。將其從false設置爲true。然後添加ItemClick事件。

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

希望它有幫助!

+0

謝謝@mindOfAi。我已經嘗試過,但仍然是listview中的最後一項。 – AppDev

+0

這很奇怪。添加「ItemClick」後是否刪除了「Tapped」事件? – mindOfAi

+0

是的,我已經刪除它。我不確定爲什麼它總是給我列表視圖中的最後一項:( – AppDev

相關問題