在WP7上将PivotItems数据绑定到ObservableCollection

时间:2011-02-03 09:01:32

标签: windows-phone-7 pivot

我想将一个ObservableCollection数据绑定到WP7中的Pivot contronl,以便我的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中的tre项目,我得到三个PivotItems。但是当一切都被加载时,DataTemplate内部的绑定将不会更新。只有当我滚动到下一个PivotItem时才会加载FirstName,LastName和HomeTown。

为什么?我错过了什么?

由于

5 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

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

我找到了另一个解决方案:当你将Item添加到你的Persons集合时,你应该首先创建一个temp元素,并且只有当你填充所有数据时才将它添加到你的Persons集合中。

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

答案 2 :(得分:0)

进行简单测试后,我无法重现此行为。我在一个相当于FirstName的get块中放了一个断点,在我的ObservableCollection中有两个项目,我得到两个点击。

你是怎么发现它没有绑定的?您无法看到“下一个”pivotitems内容,那么如何?

答案 3 :(得分:0)

听起来装货订单有问题 - 或者是通知代码。

在每个FirstName,LastName和HomeTown成员上设置属性时,检查是否正确触发了PropertyChanged事件。

答案 4 :(得分:0)

我是这样做的。对我来说,问题是集合会异步更新,以响应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);
    }
}

关键是连接Pivot项目所绑定的集合的观察者,并在更新时让数据上下文震动。