2010-11-06 40 views
13

Trong Windows Phone 7 trang Tôi có sự kiểm soát sau:DataBound Pivot kiểm soát không được tạo PivotItem đầu tiên

<controls:Pivot x:Name="Pivoter" Title="{Binding Name}" 
     TitleTemplate="{StaticResource PivotTitleTemplate}" 
     HeaderTemplate="{StaticResource PivotHeaderTemplate}" 
     ItemsSource="{Binding Items}" 
     ItemTemplate="{StaticResource DisplayItemDataTemplate}"> 
</controls:Pivot > 

với DataTemplate này:

<DataTemplate x:Key="DisplayItemDataTemplate">  
    <Image Grid.Column="0" Stretch="Uniform" 
     Source="{Binding LargeImage, Converter={StaticResource UriBitmapConverter}}"/> 
    <StackPanel Grid.Column="1" Orientation="Vertical"> 
     <HyperlinkButton NavigateUri="{Binding Uri}" Content="{Binding Uri}"/> 
    </StackPanel>  
</DataTemplate> 

Các ItemsSource là một ObservableCollection. Khi trang được hiển thị, nó tạo ra tất cả các PivotItems nhưng mục đầu tiên không được tạo ra trừ khi tôi cuộn về phía trước và quay lại nó. Nó có một mục trong danh sách cuộn nhưng không có điều khiển PivotItem.

Nếu tôi đặt điểm ngắt trong sự kiện LoadingPivotItem của Pivot Control, nó không được gọi khi trục được hiển thị lần đầu tiên nhưng lại chỉ bị trúng khi tôi cuộn đi và quay lại mục đầu tiên.

Có ai nhìn thấy hành vi tương tự cho điều khiển Pivot và có công việc xung quanh không? Hay tôi đang làm gì đó không chính xác?

Trả lời

4

Tôi đã gặp phải sự cố tương tự này.

Dường như DataContext cho trục nên được đặt trong hàm tạo. Tôi đã đặt DataContext của mình trong sự kiện Page_Loaded và mục đầu tiên của trục xoay sẽ không kích hoạt sự kiện Đang tải, như được mô tả. Bằng cách đơn giản ràng buộc DataContext của tôi trước đó, sự kiện bắt đầu kích hoạt.

Tôi tin rằng đó là lỗi trong khuôn khổ nhưng tôi chưa thực hiện đủ để xác nhận.

3

Tôi chạy đến điều này và tôi không thể giải quyết điều này bằng cách đặt bối cảnh dữ liệu trong hàm tạo, vì dữ liệu sẽ hiển thị tùy thuộc vào thông tin từ NavigationService, vì vậy tôi phải tải dữ liệu trong trình xử lý sự kiện page_loaded.

Nhưng bằng cách đặt điều khiển trục xoay SelectedIndex thành 1 trong sự kiện được tải trang, nó bắt đầu hoạt động một cách kỳ diệu. Nó không phải là một giải pháp lý tưởng, nhưng trong trường hợp này, nó là một cái chặn mà tôi vừa sửa.

Mẫu mã:

void ChannelOverview_Loaded(object sender, RoutedEventArgs e) 
    { 
     string channelSystemName; 
     if(this.NavigationContext.QueryString.TryGetValue("channelSystemName", out channelSystemName)) 
     { 
      this.viewModel.LoadData(this.Dispatcher, channelSystemName); 
      //Set the SelectedIndex to one, 
      //otherwise the pivot-view won't render the first item. 
      this.overviewPivot.SelectedIndex = 1; 
     } 
     else 
     { 
      MessageBox.Show("Kanalen hade ett felaktigt Id "); 
     } 
    } 
+0

Tôi đã thêm một dòng trực tiếp sau 'this.overviewPivot.SelectedIndex = 1;': 'this.overviewPivot.SelectedIndex = 0;' Làm việc xung quanh lỗi quá mà không bị buộc phải viết hàm tạo. –

+0

Vấn đề duy nhất tôi có bây giờ là khi số lượng PivotItems là một bởi vì sau đó tôi sẽ không thể chuyển sang một PivotItem khác. Không cho phép thêm giả khi sử dụng liên kết để tạo PivotItems. –

+0

Tôi tìm thấy một giải pháp làm việc vì vậy tôi đã thêm một câu trả lời. –

0

This blogpost giải quyết vấn đề của tôi.

Vấn đề của tôi với các giải pháp được cung cấp khác là tôi không thể sử dụng hàm tạo để đặt DataContext và đôi khi, chỉ có một PivotItem để tôi có thể chuyển đổi qua lại để tải nội dung.

Giải pháp cực kỳ đơn giản: trước khi cập nhật bộ sưu tập mà Pivot được ràng buộc để đặt DataContext thành giá trị rỗng. Sau đó cập nhật bộ sưu tập và sau đó đặt DataContext thành bộ sưu tập.

1

Có thể hơi trễ một chút, nhưng có thể sẽ giúp ai đó. Theo tài liệu, SelectedIndex của trục xoay nếu 0 và thay đổi ngữ cảnh dữ liệu dẫn đến SelectedIndex là 0 lần nữa không cập nhật mục đầu tiên của trục và không gọi sự kiện tải mục trục xoay. Tuy nhiên, sau cũng đã làm việc khi tôi đã có một điều khiển pivot bị ràng buộc dữ liệu. Lưu ý rằng pivotTypes.Items [0] trả về đối tượng bị ràng buộc dữ liệu chứ không trả về mục pivot.

pivotTypes.SelectedItem = pivotTypes.Items[ 0 ]; 
Các vấn đề liên quan