的Windows Phone:列表框不能显示添加的项目

问题描述:

我想在一个的ObservableCollection显示添加的元素显示在页面(MenuPage)列表框。的Windows Phone:列表框不能显示添加的项目

这个系列是由另一页,名为AddActivityAdvancedPage喂养。在AddActivityAdvancedPage中,用户填写表单并保存我将其作为对象(pmaActivity)发送给MenuPage的信息。 MenuPage接收对象并添加到ObservableCollection上。

的问题是,我的ObservableCollection不要将增加itens!列表框中不显示itens。

我调试代码,每次应用打线ListActivitiesAdvanced.Add(pmaActivity);上MenuPage,该ListActivitiesAdvanced是空的。我需要以某种方式将ListActivitiesAdvanced设置为静态,但我不知道如何以正确的方式来执行此操作。

AddActivityAdvancedPage类:

public partial class AddActivityAdvancedPage : PhoneApplicationPage 
{ 

    //method called to pass the object pmaActivity as parameter to the MenuPage 
    private void btnSave_Click(object sender, EventArgs e) 
    { 
     Dispatcher.BeginInvoke(() => 
       { 
        PhoneApplicationService.Current.State.Remove("pmaActivity"); 
        PhoneApplicationService.Current.State["pmaActivity"] = pmaActivity; 
        NavigationService.Navigate(new Uri("/MenuPage.xaml", UriKind.Relative)); 
       }); 
    } 

} 

MenuPage类:

public partial class MenuPage : PhoneApplicationPage 
    { 
     public ObservableCollection<PmaActivity> ListActivitiesAdvanced { get; set; } 

     public MenuPage() 
     { 
      InitializeComponent(); 
      ListActivitiesAdvanced = new ObservableCollection<PmaActivity>(); 
     } 

     //Method called to receive the pmaActivity and add in the collection 
     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      if (PhoneApplicationService.Current.State.ContainsKey("pmaActivity")) 
      { 
       PmaActivity pmaActivity = PhoneApplicationService.Current.State["pmaActivity"] as PmaActivity; 
       PhoneApplicationService.Current.State.Remove("pmaActivity"); 
       ListActivitiesAdvanced.Add(pmaActivity); 
      } 
     } 
    } 

列表框在MenuPage:

<ListBox ItemsSource="{Binding ListActivitiesAdvanced}" Margin="0,0,12,0"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" Height="105" > 
       <Border BorderThickness="1" Width="73" Height="73" BorderBrush="#FF005DFF" Background="#FF005DFF" Margin="0,10,8,0" VerticalAlignment="Top"/> 
       <StackPanel Width="370"> 
        <TextBlock Text="{Binding clientName}" TextWrapping="NoWrap" 
         Margin="12,0,0,0" Style="{StaticResource PhoneTextLargeStyle}"/> 
        <TextBlock Text="{Binding projectName}" TextWrapping="NoWrap" 
         Margin="12,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}"/> 
       </StackPanel> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

我尝试从MenuPage删除ListActivitiesAdvanced并添加斧:名称来具有相同名称的ListBox元素:ListActivitiesAdvanced:

<ListBox x:Name="ListActivitiesAdvanced" Margin="0,0,12,0"/> 

但在这种情况下,问题是这个列表不能保存以前添加itens!每次添加项目时,只有最后添加的项目显示在ObservableCollection上。

感谢您的帮助!我真的有问题,有很多方法来绑定ListBox中的列表(如StaticResource,Source,Binding,List,ObservableCollection,IEnumerable ...),我无法理解所有的差异。

如果你想坚持的项目列表中,那么为什么不干脆把完整列表到应用程序的状态?

//method called to pass the object pmaActivity as parameter to the MenuPage 
private void btnSave_Click(object sender, EventArgs e) 
{ 
    Dispatcher.BeginInvoke(() => 
    { 
     List<PmaActivity> activities; 
     if (PhoneApplicationService.Current.State.ContainsKey("pmaActivities")) 
      activities = PhoneApplicationService.Current.State["pmaActivities"]; 
     else 
      activities = new List<PmaActivity>(); 
     activities.Add(pmaActivity); 
     PhoneApplicationService.Current.State["pmaActivities"] = pmaActivities; 
     NavigationService.Navigate(new Uri("/MenuPage.xaml", UriKind.Relative)); 
    }); 
} 

然后在主页上,从列表填充:

//Method called to receive the pmaActivity and add in the collection 
protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    if (PhoneApplicationService.Current.State.ContainsKey("pmaActivity")) 
    { 
     if (PhoneApplicationService.Current.State.ContainsKey("pmaActivities")) 
     { 
      var pmaActivities = PhoneApplicationService.Current.State["pmaActivities"] as List<PmaActivity>; 
      foreach (var activity in pmaActivities) 
       ListActivitiesAdvanced.Add(activity); 
     } 
    } 
+0

谢谢!我想过这个,但对我来说似乎很奇怪。这是通常的方式来做这个wpf? – Dherik 2014-12-13 01:04:47

+1

@Dherik说实话,我不知道。由于您在页面之间来回导航(尤其是如果您需要在应用程序退出时将列表保存到存储空间),因此看起来像是一个好选择。 – McGarnagle 2014-12-13 01:14:48