我想将一个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。
为什么?我错过了什么?
由于
答案 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项目所绑定的集合的观察者,并在更新时让数据上下文震动。