在Windows 8商店应用中获取Listview itemtemplate中的文本块值

时间:2013-12-04 17:05:03

标签: c# windows-8 windows-store-apps winrt-xaml

我使用XAML动态填充listview,如下所示

<ListView>
    <ListView.ItemTemplate>
        <DataTemplate x:Name="templateTrending" >
            <StackPanel Orientation="Horizontal">
                <TextBlock x:Name="questionBlock" Text="{Binding Path=ques}" Margin="20" />
                <TextBlock x:Name="categoryBlock" Text="{Binding Path=categ}" Margin="20"/>
                <TextBlock x:Name="userBlock" Text="{Binding Path=user}" Margin="20"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

现在在listviewselection已更改的方法中,我需要获取文本块的值并传递给下一个XAML页面。我尝试Jerry Nixon's method但我无法弄明白。然后我尝试wpf method也没有工作。所以如何实现这一点。下面是代码我如何将值分配给列表视图

public class Product
{
    public string Question { get; set; }

    public string Category { get; set; }

    public string User { get; set; }
}

并将列表视图添加如下

ParseQuery<ParseObject> query = ParseObject.GetQuery("Questions").Include("user");
IEnumerable<ParseObject> res = await query.FindAsync();

List<Product> list = new List<Product>();
foreach (var i in res)
{
    var u = i.Get<ParseUser>("user").Username;
    var q = i.Get<string>("question");
    var c = i.Get<string>("category");
    list.Add(new Product
    {
        Question = q,
        Category = c,
        User = u,
    });
}
listTrending.ItemsSource = list;

从parse.com后端获取数据。我选择的项目代码如下

private void listTrending_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    string Qpass = listTrending.SelectedItem.ToString();
    this.Frame.Navigate(typeof(WallScreen), Qpass);
}

下面的代码如下所示

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (e.Parameter != null)
    {
        textQuestion.Text = e.Parameter.ToString();
    }
    else
    {
        textQuestion.Text = "";
    }
}

2 个答案:

答案 0 :(得分:1)

我认为你正在以错误的方式看待它。如果您尝试获取所选项目的值并使用绑定在UI中显示值 - 您可以从绑定源中提取这些值,在您的情况下是listTrending.SelectedItem - 您只需要将其转换为Product

答案 1 :(得分:0)

您需要发布选择更改事件处理程序的代码。我不确定我是否理解你要做的事情,因为如果你想要做的就是获取所选项目的内容就像这样容易:

    private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(e.AddedItems.Count > 0)
        {
            Product p = e.AddedItems[0] as Product;
        }
    }