2013-09-02 23 views
6

Tôi có một điều khiển Map với MapsItemControl trong đó:"Items phải trống trước khi sử dụng mục Source" khi cập nhật MapItemsControl.ItemsSource

<maps:Map x:Name="MyMap"> 
    <maptk:MapExtensions.Children> 
     <maptk:MapItemsControl> 
      <maptk:MapItemsControl.ItemTemplate> 
       <DataTemplate> 
        . . . 
       </DataTemplate> 
      </maptk:MapItemsControl.ItemTemplate> 
     </maptk:MapItemsControl> 
    </maptk:MapExtensions.Children> 
</maps:Map> 

tôi cư MapItemsControl trong mã theo cách sau:

var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault(); 
itemCollection.ItemsSource = myItemCollection; 

Điều này hoạt động chính xác khi thêm các mục vào bản đồ lần đầu tiên. Nhưng nếu tôi muốn cập nhật nó với một bộ sưu tập item soruce mới, tôi nhận được lỗi sau trong itemCollection.ItemsSource = myItemCollection; dòng:

Items must be empty before using Items Source

Vì vậy, tôi đã cố gắng bằng cách thêm một dòng vào mã của tôi, để loại bỏ các mục trước khi thiết lập nguồn một lần nữa, không có thành công:

var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault(); 
itemCollection.Items.Clear(); 
itemCollection.ItemsSource = myItemCollection; 

Bây giờ tôi có được ngoại lệ folowing phù itemCollection.Items.Clear();:

Collection is in non writeable mode

Làm thế nào tôi có thể cập nhật các mục trong MapItemsControl?

+0

Bạn có thêm các mục bằng tay tại một số điểm? Bằng cách sử dụng 'itemCollection.Add (...)'? –

+0

@KooKiz không, tôi không có. – anderZubi

Trả lời

-1

Urmm .. Làm thế nào về

itemCollection.Items = itemCollection.Items.Clear(); 
0

Giả sử bạn đang tiếp tục sử dụng myItemCollection cùng để giữ thông tin hiện tại của bạn (nếu bạn đang binging một nguồn, điều này có lẽ nên là trường hợp), sau đó bạn không cần phải rebind. Thay vào đó, bạn cần phải ném các sự kiện PropertyChanged, do đó thành phần sẽ biết cập nhật với nội dung hiện tại của nguồn. Xem Binding Sources tutorialHow to: Implement Property Change Notification từ Microsoft để biết thêm.

+0

Thật không may có vẻ như ràng buộc không thể được sử dụng với MaptItemsControl.ItemsSource. Việc sử dụng ràng buộc sẽ giúp việc đạt được mục tiêu của tôi dễ dàng hơn nhiều. Nhưng đối phó với bản đồ trong WP8 có vẻ khó khăn hơn so với WP7. – anderZubi

+0

Theo trang MapItemsControl (http://msdn.microsoft.com/en-us/library/jj620947.aspx), nó dành cho ràng buộc dữ liệu. Nó thực hiện điều này như là một lớp con của ItemsControl (http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemssource.aspx). – aring

+1

Đó là dành cho Bing Maps trong ứng dụng Windows Store. Nó cũng làm việc với Bing Maps trong WP7, nhưng không phải với MapItemsControl từ Windows Phone Toolkit và Nokia Maps trong WP8 – anderZubi

0

Cố gắng sử dụng DataContext thuộc tính. Và afaik bạn không cần phải viết rõ ràng trong khi sử dụng nó. Chỉ cần thử cách này:

var itemCollection = MapExtensions.GetChildren((Map)MyMap).OfType<MapItemsControl>().FirstOrDefault(); 
itemCollection.DataContext = myItemCollection; 
+2

itemCollection không có thuộc tính DataContext. – anderZubi

+0

Vì vậy, những gì về để viết 'itemCollection.ItemsSource = null; itemCollection.ItemsSource = myItemCollection; '? Ngoài ra: http: // stackoverflow.com/questions/14525618/phone-maps-items-collection-must-be-empty-before-using-itemssource –

+2

Tôi nhận được cùng một lỗi: * Các mục phải trống trước khi sử dụng Mục Nguồn * – anderZubi

2

Có vẻ như mục bị khóa nếu bạn liên kết với ItemsSource ... nhưng nếu bạn thêm từng mục bằng Item.Add (mục), nó hoạt động tốt. Vì vậy, những gì tôi đã kết thúc làm được điều này:

var itemCollection = MapExtensions.GetChildren((Map)MyMap) 
            .OfType<MapItemsControl>().FirstOrDefault(); 
if(itemCollection != null && itemCollection.Items.Count >0) 
{ 
    itemCollection.Items.Clear(); 
} 
foreach(var item in YourPushpinCollection) 
{ 
    itemCollection.Items.Add(item); 
} 

Hope this helps :)

+1

Điều này làm việc giống như một sự quyến rũ đối với tôi ! Vấn đề duy nhất tôi thấy bây giờ là khi loại bỏ và thêm lại pushpins, họ có xu hướng trực quan "nhảy" lên một vài điểm ảnh khi họ lần đầu tiên xuất hiện. –

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