将列表框中的选定项目作为字符串传递到另一个页面

时间:2013-12-31 00:27:43

标签: c# listbox windows-phone

我有这样的列表框...我想要的是当我在列表框中选择一个项目时......它会将所选值作为字符串传递给另一个页面。我可以获取所选项目的字符串并将该值传递给下一页吗?

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

4 个答案:

答案 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事件中......