Windows phone 7 将数据透视项绑定到WP7上的ObservableCollection

Windows phone 7 将数据透视项绑定到WP7上的ObservableCollection,windows-phone-7,pivot,Windows Phone 7,Pivot,我想将ObservableCollection数据绑定到WP7中的Pivot控件,以便ObservableCollection中的每个对象都成为PivotItem。这是我使用的代码: <controls:Pivot x:Name="MainPivot" ItemsSource="{Binding Persons}"> <controls:Pivot.HeaderTemplate> <DataTemplate>

我想将ObservableCollection数据绑定到WP7中的Pivot控件,以便ObservableCollection中的每个对象都成为PivotItem。这是我使用的代码:

    <controls:Pivot x:Name="MainPivot" ItemsSource="{Binding Persons}">
        <controls:Pivot.HeaderTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding FullName}"/>
            </DataTemplate>
        </controls:Pivot.HeaderTemplate>
        <controls:Pivot.ItemTemplate>
            <DataTemplate>
                <StackPanel Margin="0,0,0,17" Width="432">
                    <TextBlock Text="{Binding FirstName}"/>
                    <TextBlock Text="{Binding LastName}"/>
                    <TextBlock Text="{Binding HomeTown}"/>
                </StackPanel>
            </DataTemplate>
        </controls:Pivot.ItemTemplate>
    </controls:Pivot>

这是有效的,在我的ObservableCollection中有三个项目,我得到三个数据透视项目。但是当所有内容都被加载时,DataTemplate中的绑定将不会得到更新。只有当我滚动到下一个数据透视项时,才能加载FirstName、LastName和homightry

为什么呢?我错过了什么


谢谢

在做了一个简单的测试后,我无法重现这种行为。我在相当于FirstName的get块中放置了一个断点,在ObservableCollection中有两个项,我得到了两个命中


您是如何发现它没有绑定的?您无法看到“下一个”数据透视项内容,因此如何处理?

听起来加载顺序或通知代码有问题

当您为每个FirstName、LastName和家乡成员设置属性时,请检查是否正确触发了PropertyChanged事件。

检查以下讨论:

我也遇到了同样的问题,但是设置SelectedIndex=1的解决方法不适合我

我找到了另一种解决方案:当您将项目添加到Persons集合时,您应该首先创建一个temp元素,并且只有在填充所有数据时才能将其添加到Persons集合

Person tempPers = new Person() { FullName = "Abduvaliev Edem", FirstName = "Edem", LastName = "Abduvaliev", HomeTown = "Sevastopol"};
Pesrons.Add(tempPers);

我是这样做的。对我来说,问题是集合会异步更新以响应web方法调用

void Page_Loaded(object sender, RoutedEventArgs e)
{
    _log.Debug("Page loaded.");

    var vm = this.GetViewModel<TrendsViewModel>();

    if (!vm.IsInitialized)
    {
        vm.PivotItems.CollectionChanged += (origin, args) =>
        {
            this.PivotControl.DataContext = null;
            this.PivotControl.DataContext = vm;
        };

        vm.Initialize(this);
    }
}
void Page_加载(对象发送方,路由目标)
{
_调试(“页面加载”);
var vm=this.GetViewModel();
如果(!vm.IsInitialized)
{
vm.PivotItems.CollectionChanged+=(原点,参数)=>
{
this.PivotControl.DataContext=null;
this.PivotControl.DataContext=vm;
};
初始化(这个);
}
}

关键是连接数据透视项绑定到的集合的观察者,并在数据上下文更新时给它一个震动。

Hi Jonas。我看不到的是“第一个”数据透视项的属性。当我滑动到“下一个”时,会显示一个,当我向后滑动时,会显示“第一个”。何时实例化ObservableCollection,何时向其中添加项目?我的测试在设置DataContext之前我在构造函数中创建并添加了项,但是在测试在加载的事件中设置DataContext之后,它仍然对我有效,尽管这不重要。但设置MainPivot.SelectedIndex=1;在页面中,你加载了它。一定要喜欢这些变通方法!不,这不重要,对我来说也不重要,它仍然适用于两种解决方案。设置SelectedIndex肯定会解决这个问题,如果您对该解决方案感到满意,那么很好:)我认为真正的问题是在您的viewmodel中或在您创建项目时