2013-03-01 32 views
5

Tôi có một LongListSelector WP8 với mẫu sau:Tại sao WP8 LongListSelector không chính xác tái sử dụng Kiểm tra trạng thái CheckBox?

<DataTemplate x:Key="ItemTemplate"> 
     <Grid Margin="0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="110"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="Auto"/> 
      </Grid.ColumnDefinitions> 
      <controls:BlockImageControl 
         Grid.Column="0" 
         Width="110" 
         Height="110" 
         Background="Transparent" /> 
      <TextBlock x:Name="Name" 
          Grid.Column="1" 
          Text="{Binding ScreenName}" 
          FontSize="{StaticResource PhoneFontSizeLarge}" 
          FontWeight="Bold" 
          VerticalAlignment="Center"/> 
      <CheckBox x:Name="Unblock" Grid.Column="2" VerticalAlignment="Center" 
         Tap="BlocksList_Tap" 
         IsChecked="false" 
         /> 
     </Grid> 
    </DataTemplate> 

Như bạn có thể thấy có một hộp kiểm ở phần cuối của từng hạng mục di động, cho phép người dùng lựa chọn nhiều mục. IsChecked là false theo mặc định.

Vấn đề là LongListSelector dường như đang lưu vào bộ nhớ cache trạng thái Đã kiểm tra của hộp kiểm của tôi. Nếu tôi kiểm tra đầu tiên, mục, sau đó di chuyển xuống một phần, sau khoảng 30 mục hoặc hơn, tôi thấy một mục khác được kiểm tra mà tôi không chọn. Phần còn lại của các ràng buộc làm việc. Nó giống như là nó bỏ qua thuộc tính "IsChecked" trong khuôn mẫu. Tôi đã thử ràng buộc thuộc tính IsChecked vào một thuộc tính, không may mắn.

Có ai biết nếu đây là lỗi không, và nếu không, làm cách nào tôi có thể khắc phục hành vi này?

Cảm ơn!

enter image description here

Trả lời

7

Không phải là một lỗi, mặc dù nó có thể trông giống như một lỗi lúc đầu. Những gì bạn thấy là hiệu ứng của ảo hóa ui, về cơ bản LongListSelector tái tạo các mẫu dữ liệu thay vì tạo các mẫu mới để cải thiện hiệu suất. Một hiệu ứng phụ được biết đến của việc tái chế là nếu mẫu dữ liệu của bạn chứa các điều khiển duy trì trạng thái riêng của chúng, CheckBox chẳng hạn, trạng thái đó sẽ chuyển sang mục mới.

Để giải quyết vấn đề này, bạn cần quản lý trạng thái điều khiển bên ngoài, tức là trong mô hình chế độ xem. Trong trường hợp cụ thể của bạn IsChecked tài sản của CheckBox phải được ràng buộc với một tài sản của mô hình xem. Và đảm bảo sử dụng hai cách ràng buộc.

+0

Đó là cảm ơn. Tôi đã thử điều này trước đây nhưng TwoWay là bí mật! – esilver

+0

Cách 'TwoWay' ảnh hưởng đến vấn đề này? – Ku6opr

Các vấn đề liên quan