[英]Databinding PivotItems to ObservableCollection on WP7
我想将ObservableCollection数据绑定到WP7中的数据透视控制,以便我的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才会被加载。
这是为什么? 我想念什么?
谢谢
我有同样的问题,但是设置SelectedIndex = 1的解决方法不适合我。
我找到了另一种解决方案:将Item添加到Persons集合时,您应该首先创建一个temp元素,只有在填充所有数据时,才将其添加到Persons集合中。
Person tempPers = new Person() { FullName = "Abduvaliev Edem", FirstName = "Edem", LastName = "Abduvaliev", HomeTown = "Sevastopol"};
Pesrons.Add(tempPers);
经过简单的测试后,我无法重现此行为。 我在我的ObservableCollection中的两个项目的FirstName等效项的get块中放置了一个断点,得到了两次命中。
您如何检测到它没有绑定? 您看不到“下一个”枢轴项目的内容,怎么办?
听起来加载顺序或通知代码有问题。
在每个FirstName,LastName和HomeTown成员上设置属性时,请检查是否正确触发了PropertyChanged事件。
这是我的方法。 对我来说,问题是集合响应于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);
}
}
关键是挂钩数据透视表项绑定到的集合的观察者,并在数据上下文更新时使数据上下文摇动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.