C# Windows Phone:列表框无法显示添加的项目

C# Windows Phone:列表框无法显示添加的项目,c#,windows-phone-8,listbox,C#,Windows Phone 8,Listbox,我试图在ObservableCollection中显示添加的元素,以显示在页面(MenuPage)的列表框中 此集合由另一个名为AddActivityAdvancedPage的页面提供。在AddActivityAdvancedPage中,用户填写表单并将我发送的信息作为对象(pmaActivity)保存到菜单页。菜单页接收对象并添加到ObservableCollection上 问题是,我的可观察到的收集不支持添加的ITEN!列表框上没有显示ITEN 我调试代码,每次应用程序点击行ListActi

我试图在ObservableCollection中显示添加的元素,以显示在页面(MenuPage)的列表框中

此集合由另一个名为AddActivityAdvancedPage的页面提供。在AddActivityAdvancedPage中,用户填写表单并将我发送的信息作为对象(pmaActivity)保存到菜单页。菜单页接收对象并添加到ObservableCollection上

问题是,我的可观察到的收集不支持添加的ITEN!列表框上没有显示ITEN

我调试代码,每次应用程序点击行
ListActivitiesAdvanced.Add(pmaActivity)
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));
                });
    }

}
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);
            }
        }
    }
菜单页类别:

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

}
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);
            }
        }
    }
公共部分类菜单页面:PhoneApplicationPage
{
公共ObservableCollection ListActivities高级{get;set;}
公共菜单页()
{
初始化组件();
ListActivitiesAdvanced=新的ObservableCollection();
}
//方法以接收集合中的活动和外接程序
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
if(PhoneApplicationService.Current.State.ContainsKey(“活动”))
{
PmaActivity PmaActivity=PhoneApplicationService.Current.State[“PmaActivity”]作为PmaActivity;
PhoneApplicationService.Current.State.Remove(“活动”);
ListActivitiesAdvanced.Add(pmaActivity);
}
}
}
菜单页中的列表框:

<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元素添加一个x:Name,其名称与ListActivitiesAdvanced相同:

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

但在这种情况下,问题是这个列表不包含以前添加的ITEN!每次我添加一个项目时,只有最后添加的项目才会显示在ObservableCollection上


谢谢你的帮助!我真的有问题,有很多方法可以绑定列表框中的列表(如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));
    });
}
//调用方法将对象作为参数传递给菜单页
私有void btnSave\u单击(对象发送方,事件参数e)
{
Dispatcher.BeginInvoke(()=>
{
列出活动清单;
if(PhoneApplicationService.Current.State.ContainsKey(“活动”))
activities=PhoneApplicationService.Current.State[“pmaActivities”];
其他的
活动=新列表();
活动。添加(活动);
PhoneApplicationService.Current.State[“pmaActivities”]=pmaActivities;
NavigationService.Navigate(新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);
        }
    }
//调用方法以接收集合中的活动和外接程序
受保护的覆盖无效OnNavigatedTo(NavigationEventArgs e)
{
if(PhoneApplicationService.Current.State.ContainsKey(“活动”))
{
if(PhoneApplicationService.Current.State.ContainsKey(“活动”))
{
var pmaActivities=PhoneApplicationService.Current.State[“pmaActivities”]作为列表;
foreach(PMA活动中的var活动)
ListActivitiesAdvanced.Add(活动);
}
}

谢谢!我想过这一点,但对我来说似乎真的很奇怪。这是wpf上通常的做法吗?@Dherik说实话,我不知道。这似乎是一个不错的选择,因为你在页面之间来回导航(尤其是当应用程序退出时需要将列表保存到存储中)。