2011-12-12 31 views
7

Tôi đang cố gắng triển khai các mục "tải nhiều hơn" khi người dùng đến cuối hộp danh sách, nhưng mỗi lần tôi cố gắng thêm các mục mới vào hộp danh sách để có kết quả như này:Hoạt động không được hỗ trợ trên bộ sưu tập chỉ đọc C# wp7

"Thao tác không được hỗ trợ trên bộ sưu tập chỉ đọc".

Tôi đã thử một số giải pháp từ diễn đàn đến blog dường như không có tác dụng. Tôi thậm chí không thể hiểu được logic đằng sau vấn đề mà có vẻ hơi lạ đối với tôi.

Những gì tôi đang làm về cơ bản đang tải danh sách các mục và gán làm nguồn cấp dữ liệu của hộp danh sách của tôi.

wineFilterListBox.ItemsSource = wines; 

Khi người dùng nhận được để dưới cùng của danh sách, tôi thêm các mục (giống như ứng dụng twitter cho WP7)

public ObservableCollection<Wine> wines; 
... 

    if (atBottom) 
    { 
     int Count = page.wineFilterListBox.Items.Count; 
     int end = Count + 10; 
     for (int i = Count; i < end; i++) 
     { 
      page.LoadWineList(Count); 
     } 
    } 
... 

    private void LoadWineList(int Count = 1) 
    { 
    ... 
     wineFilterListBox.Items.Add(wines); 
    } 

Trả lời

9

Khi bạn sử dụng ItemSource bộ sưu tập Items trở thành read-only. Có vẻ như bạn phải thêm dữ liệu vào bộ sưu tập thay vì thuộc tính ListBoxItems.

Xem MSDN: ItemsControl.ItemSource Property

Đặc biệt, phần này:

Khi bất động sản ItemsSource được thiết lập, bộ sưu tập Items được làm read-only và kích thước cố định.

Hãy thử thêm mục vào bộ sưu tập wines trực tiếp, kể từ bộ sưu tập của bạn là một 'ObservableCollection':

Bạn nên thiết lập ItemsSource đến một đối tượng mà thực hiện giao diện INotifyCollectionChanged để thay đổi trong bộ sưu tập sẽ được phản ánh trong ItemsControl. Lớp ObservableCollection (Of T) định nghĩa một đối tượng như vậy.

+0

nhờ. Loại bỏ dòng cuối cùng đã làm nó. "wineFilterListBox.Items.Add (rượu vang);" Tôi đã thử rất nhiều giải pháp mà tôi đã bỏ lỡ cơ bản trong khi sử dụng ObservableCollection. Chỉ cần thêm vào danh sách các loại rượu vang là đủ để cập nhật hộp danh sách. –

+0

@BrunoNunes: Không sao cả! Nó luôn luôn là những điều nhỏ mà có được chúng tôi :-) –

0

FYI, nếu bạn cố ý không muốn sử dụng ObservableCollection thiết ItemsSource Bạn có thể thêm Wine bằng tay để bạn wineFilterListBox.Items

for (int i = Count; i < 10; i++) 
{ 
    wineFilterListBox.Items.Add(new Wine()); 
} 

nguyên nhân này các wineFilterListBox.Items để không trở thành read-only

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