C# 重新加载同一页面,但列表框选择已更改事件Windows Phone 7 update

C# 重新加载同一页面,但列表框选择已更改事件Windows Phone 7 update,c#,windows-phone-8,C#,Windows Phone 8,下面是我想看到的一个例子: 因为我正在列表框中显示类别标题(它们是新闻提要、消息等)。我想要的是,当用户选择一个类别并触发一个已更改的事件时,它应该在同一页面上显示该类别的相关详细信息 这是我的代码Class1.cs public class RootObject { public string category_id { get; set; } public string category_heading { get; set; }

下面是我想看到的一个例子:

因为我正在列表框中显示类别标题(它们是新闻提要、消息等)。我想要的是,当用户选择一个类别并触发一个已更改的事件时,它应该在同一页面上显示该类别的相关详细信息

这是我的代码Class1.cs

   public class RootObject
    {
        public string category_id { get; set; }
        public string category_heading { get; set; }
        public string detail { get; set; }
    }
MainPage.xaml.cs中的代码

  namespace testApp
 {

 public partial class mainpage : PhoneApplicationPage
 {
    private bool _isSettingsOpen = false;

     RootObject obj = new RootObject();

     public mainpageUI()
    {
        InitializeComponent();
        Loaded += mainpage;
    }       

    public void mainpage(object sender, RoutedEventArgs e)
    {
        WebClient webClient = new WebClient();
        webClient.DownloadStringAsync(new Uri("JSON STRING"));
        webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
    }


    public void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        RootObject[] jobj = JsonConvert.DeserializeObject<RootObject[]>(e.Result);       


        listBox1.ItemsSource = jobj;

    }

    **private void on_click(object sender, SelectionChangedEventArgs e) //listbox selectionchanged event
    {
        //what should I do here so that every time user will select different category it will display details   on same page.

    }**

  private void button1_Click(object sender, EventArgs e)  //Code for event which opens Facebook like menu pane
    {

        if (_isSettingsOpen)
        {
            VisualStateManager.GoToState(this, "SettingsClosedState", true);
            _isSettingsOpen = false;
        }
        else
        {
            VisualStateManager.GoToState(this, "SettingsOpenState", true);
            _isSettingsOpen = true;
        }

    }        
  }
}
namespace testApp
{
公共部分类主页:PhoneApplicationPage
{
private bool_isSettingsOpen=false;
RootObject obj=新的RootObject();
公共mainpageUI()
{
初始化组件();
加载+=主页面;
}       
public void主页(对象发送者、路由目标)
{
WebClient WebClient=新的WebClient();
下载StringAsync(新Uri(“JSON字符串”);
webClient.DownloadStringCompleted+=新的DownloadStringCompletedEventHandler(webClient\u DownloadStringCompleted);
}
public void webClient_DownloadStringCompleted已完成(对象发送方,DownloadStringCompletedEventArgs e)
{
RootObject[]jobj=JsonConvert.DeserializeObject(e.Result);
listBox1.ItemsSource=jobj;
}
**单击(对象发送者,SelectionChangedEventArgs e)时出现私有无效//列表框selectionchanged事件
{
//我应该在这里做什么,以便每次用户选择不同的类别时,它都会在同一页面上显示详细信息。
}**
private void button1\u Click(object sender,EventArgs e)//打开类似Facebook的菜单窗格的事件代码
{
如果(_isSettingsOpen)
{
VisualStateManager.GoToState(这是“设置关闭状态”,true);
_isSettingsOpen=false;
}
其他的
{
VisualStateManager.GoToState(此为“SettingsPenState”,为true);
_isSettingsOpen=true;
}
}        
}
}

要根据用户选择筛选项目,请先将数据保存到属性。然后,当选择发生时,过滤属性并重新附着。注意,不需要重新加载页面,只需更改控件的绑定以使用已筛选的新列表

private RootObject[] InitialFeed { get; set; } 


public void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
   InitialFeed = JsonConvert.DeserializeObject<RootObject[]>(e.Result);       

  listBox1.ItemsSource = InitialFeed ;

}

private void on_click(object sender, SelectionChangedEventArgs e) //listbox selectionchanged event
{
   listBox1.ItemsSource = InitialFeed.Where(itm => itm.SomeSubProperty == listbox1.SelectedValue)
                                     .ToList();

}
private RootObject[]InitialFeed{get;set;}
public void webClient_DownloadStringCompleted已完成(对象发送方,DownloadStringCompletedEventArgs e)
{
InitialFeed=JsonConvert.DeserializeObject(如Result);
listBox1.ItemsSource=InitialFeed;
}
单击(对象发送者,SelectionChangedEventArgs e)时出现私有无效//列表框selectionchanged事件
{
listBox1.ItemsSource=InitialFeed.Where(itm=>itm.SomeSubProperty==listBox1.SelectedValue)
.ToList();
}
上面发生的事情是,原始数据被保存下来,并且显示时没有过滤器。然后,用户从另一个列表框中选择一些内容,这会导致我们过滤掉他们选择的内容,并使用一组新数据重新绑定
lisBox1


请注意,这将起作用,但不是一种MVVM方式。在我的博客文章

中,我给出了一个用Xaml进行MVVM和基本绑定的快速示例,如果我必须为listbox中的每个选择传递category_id和selected index,然后在此基础上在同一页面上显示详细信息,该怎么办?@user3183503您需要研究如何将这些值绑定到ViewModel或集中位置。一旦这样做了,人们只需访问所有这些信息,并在上面显示的点击中相应地处理它们。该VM(视图模型)可以传递到不同的页面,如果这也是一种导航情况,则页面可以使用它。您已经掌握了控件使用的基本知识,但是使用MVVM基序可以极大地增强WPF/WP8/Silverlight/Win RT的功能;因此,您需要仔细阅读/调查。:-)