我有一个列表框,哪些项目可以打开&通过以下代码查看...
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而不是listbox。 长列表选择器显示我在数据库中的所有项目,但是我在从此列表中打开项目时遇到问题...我无法在此longlistselector中使用SelectedIndex请帮助...
答案 0 :(得分:1)
要点击项目,请将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));
}
答案 1 :(得分:1)
我建议你改变你的工作流程。而不是收听Tap事件,而是收听SelectionChanged事件。从此事件中,您可以获取SelectedItem。 SelectItem是Items绑定的对象。
示例:您的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;
}