我使用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 = "";
}
}
答案 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;
}
}