我有这样的列表框...我想要的是当我在列表框中选择一个项目时......它会将所选值作为字符串传递给另一个页面。我可以获取所选项目的字符串并将该值传递给下一页吗?
<ListBox x:Name="AnyList" ItemsSource="{Binding LoadSearch1}" SelectionChanged="AnyList_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Width="466" Margin="0, 0, 0, 12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="360"/>
</Grid.ColumnDefinitions>
<Grid Grid.Column="0"></Grid>
<StackPanel Grid.Column="1">
<TextBlock FontSize="40" Text="{Binding ByAny}" FontWeight="Normal" FontStyle="Normal" Style="{StaticResource PhoneTextTitle3Style}" TextWrapping="Wrap"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我的下一页:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string any = NavigationContext.QueryString["passingvalue"];
base.OnNavigatedTo(e);
App.MainViewModel.SearchAny(any);
}
我试过这个但不成功.....
private void AnyList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string ListBoxConent = ((ListBoxItem)AnyList.SelectedItem).Content.ToString();
NavigationService.Navigate(new Uri("/View/SearchResult/SearchAny.xaml?passingvalue=" + ListBoxConent, UriKind.RelativeOrAbsolute));
}
我收到此错误:System.InvalidCastException:无法将类型为'Search'的对象强制转换为'System.Windows.Controls.ListBoxItem'
我的LoadSearch1是:
private ObservableCollection<Search> _LoadSearch1 = new ObservableCollection<Search>();
public ObservableCollection<Search> LoadSearch1
{
get { return _LoadSearch1; }
set
{
_LoadSearch1 = value;
NotifyPropertyChanged("LoadSearch1");
}
}
我已经通过以下方式将数据添加到LoadSearch1:
public void AddSearch1(string newhistory)
{
LoadSearch1.Add(new Search() { ByAny = newhistory });
}
。 这是我的搜索类:
public class Search
{
private string _ByAny;
public string ByAny
{
get { return _ByAny; }
set
{ _ByAny = value; }
}
private string _ByTitle;
public string ByTitle
{
get { return _ByTitle; }
set
{ _ByTitle = value; }
}
}
答案 0 :(得分:1)
AnyList.SelectedItem中的内容基于其ItemsSource的类型。您需要更改此行:
string ListBoxConent = ((ListBoxItem)AnyList.SelectedItem).Content.ToString();
到此:
string ListBoxConent = ((MainViewModel.Search)AnyList.SelectedItem).ByAny;
答案 1 :(得分:1)
公共类ImageProperty {
public string ImageUrl { get; set; }
public string ImageSrc { get; set; }
}
private void LstImage_SelectionChanged(object sender,SelectionChangedEventArgs e) {
ListBox listBox = (sender as ListBox);
if (listBox != null)
{
imageProperty = (listBox.SelectedItem) as ImageProperty;
if (imageProperty != null)
{
string LstItem = imageProperty.ImageUrl;
NavigationService.Navigate(new Uri("/View/ImageSelector.xaml?ImageUri=" + LstItem + "", UriKind.RelativeOrAbsolute));
}
}
}
答案 2 :(得分:0)
取决于您想要做什么以及您希望如何完成。基本上有三种方式:
在查询字符串中,也称为GET HTTP请求。该值将成为第二页URL的一部分(www.mysite.com/second_page.aspx?key=value)。
在请求正文中,也称为POST HTTP请求。该值是第一页中提交到第二页的隐藏字段。
作为会话变量。该值存储在服务器中(在内存或数据库中,具体取决于您的配置方式),并可以通过第二页的代码访问。
每种方法都有它的优点和缺点,完整的文章已经写出了它们之间的区别以及如何实现它们。一个答案中包含的信息太多了。只需谷歌这些条款,您应该找到大量的资源,如果您遇到问题或有其他问题,欢迎您在StackExchange中询问他们。
答案 3 :(得分:0)
如果您拥有列表框中所选项目的值(通过listbox.SelectedItem获取),您只需导航到下一页
NavigationService.Navigate(new Uri("/Views/YourView.xaml"+"?passingvalue="+yourstringvalue, UriKind.Relative));
原因是您只能通过该方法提交字符串。但我认为它也是通过NavigationService传递对象。另一个选择是引用params中的选定对象,并从中央商店将其返回到NavigatedTo事件中......