2013-09-30 55 views
0

我有哪些项目可以打开&鉴于以下代码列表框...变化数据绑定列表框longlistselector

private void AccountsList_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
    { 
      var listBoxItem = AccountsList.ItemContainerGenerator.ContainerFromIndex(AccountsList.SelectedIndex) as ListBoxItem; 
      var txtBlk = FindVisualChildByType<TextBlock>(listBoxItem, "txtBlkAccountName"); 
      xCa = txtBlk.Text; 

      NavigationService.Navigate(new Uri(string.Format("/ViewAccount.xaml?parameter={0}&action={1}", a.ToString(), "View"), UriKind.Relative)); 
    } 

&

T FindVisualChildByType<T>(DependencyObject element, String name) where T : class 
    { 
     if (element is T && (element as FrameworkElement).Name == name) 
     { 
      return element as T; 
     } 

     int childcount = VisualTreeHelper.GetChildrenCount(element); 

     for (int i = 0; i < childcount; i++) 
     { 
      T childElement = FindVisualChildByType<T>(VisualTreeHelper.GetChild(element, i), name); 
      if (childElement != null) 
      { 
       return childElement; 
      } 
     } 
     return null; 
    } 

现在我实现longlistselector而不是列表框。 长列表选择器显示从数据库中的所有项目,但我从这个列表中打开项目时出现问题...我无法使用此Longlistselector中的SelectedIndex请帮助...

回答

1

我建议你改变你的工作流程。而不是收听Tap事件,请收听SelectionChanged事件。从这个事件中你可以得到SelectedItem。 SelectItem是Items绑定到的对象。

示例:Your ItemsSource是List ListBox中的每个项目或LongListSelector绑定到MyObject的一个实例。你的“txtBlkAccountName”TextBlock应该让它的Text绑定到MyObject类的AccountNumber属性。

private void LongListSelector_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var myObj = AccountsList.SelectedItem as MyObject; 
    if(myObj == null) return; 

    var accountNum = myObj.AccountNumber; 
    NavigationService.Navigate(new Uri(string.Format("/ViewAccount.xaml?parameter={0}&action={1}", accountNum, "View"), UriKind.Relative)); 

    // set the selectedItem to null so the page can be navigated to again 
    // If the user taps the same item 
    AccountsList.SelectedItem = null; 
} 
1

要获取项目tap,将Tap即使在ItemTemplate内部而不是List中,也可以使用sender属性来检索所需的值。
此外,而不是使用FindVisualChildByType得到你想要的,你应该能够只使用在DataContext检索任何你想要的值:

private void AccountsItem_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
{ 
     FrameworkElement element=sender as FrameworkElement ; 
     Account item= element.DataContext as Account ; 

     xCa = item.Name; 

     NavigationService.Navigate(new Uri(string.Format("/ViewAccount.xaml?parameter={0}&action={1}", a.ToString(), "View"), UriKind.Relative)); 
}