4

同様のエラーを確認しましたが、シナリオに一致するエラーが見つかりません。

ここの例を使用しています: http://wp.qmatteoq.com/maps-in-windows-phone-8-and-phone-toolkit-a-wining-team-part-2/

毎回ではありませんが、かなり頻繁に..次の例外が発生します。

An exception of type 'System.InvalidOperationException' occurred in Microsoft.Phone.Controls.Toolkit.DLL but was not handled in user code

Items collection must be empty before using ItemsSource.

スタックトレース:

   at Microsoft.Phone.Maps.Toolkit.MapItemsControl.OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
 at System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp, Object oldValue, Object newValue)
 at System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
 at System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp, Object value, Boolean allowReadOnlySet)
 at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
 at Microsoft.Phone.Maps.Toolkit.MapItemsControl.set_ItemsSource(IEnumerable value)
 at NextBuses.MainPage.GetMembersCompleted(Object sender, GetMembersCompletedEventArgs e)
 at NextBuses.SQLService.Service1Client.OnGetMembersCompleted(Object state)

私がやっていることは、Windows Phone 8 にマップを作成することです。それが機能する場合は問題ありません。リストに画鋲として追加された 25 個のアイテムがリストにあります。

XAML:

<my:Map Height="696" MouseLeftButtonDown="Close_popup" HorizontalAlignment="Left" Name="map1" VerticalAlignment="Top" Width="480" Grid.RowSpan="2" ZoomLevel="5.5"  >
             <toolkit:MapExtensions.Children>
                <toolkit:UserLocationMarker x:Name="UserLocationMarker" Visibility="Visible" />
                <toolkit:MapItemsControl >
                    <toolkit:MapItemsControl.ItemTemplate>
                        <DataTemplate>
                            <toolkit:Pushpin  MouseLeftButtonUp="pin_click" GeoCoordinate="{Binding Location1}"  Template="{StaticResource PushpinControlTemplate1}"/>
                        </DataTemplate>
                    </toolkit:MapItemsControl.ItemTemplate>
                </toolkit:MapItemsControl>
            </toolkit:MapExtensions.Children>
        </my:Map>

C#

 ObservableCollection<DependencyObject> children = MapExtensions.GetChildren(map1);
        var obj = children.FirstOrDefault(x => x.GetType() == typeof(MapItemsControl)) as MapItemsControl;
        obj.ItemsSource = details;

「詳細」は、地理座標を含む変数を含むリストです。

4

4 に答える 4

2

ItemsSourceを設定すると、Itemsは読み取り専用になります。どちらを使用するかを選択する必要があります。ここで組み合わせることはできません。したがって、ItemsSourceを設定する前に、Items.Clear()を呼び出します。

于 2013-01-25T16:30:37.533 に答える
1

私の知る限り、データバインドされたアイテムを持つことはできず、同じ ItemsControl に対してハードコードされたアイテムを持つことはできません。つまり、DataBinding を使用している限り、ハードコードされた UserLocationMarker はそこで機能しません。

于 2013-01-25T19:16:47.167 に答える
1

この問題の解決策を探していましたが、拡張機能のソース コードを確認したところ、ItemsSource が変更されたときに、Items.Count > 0 かどうかをチェックして例外をスローする if ステートメントがあることがわかりました。

したがって、新しい Collection を ItemsSource として設定するには、次のコードを使用できます。

MapItemsControl MIC = MapExtensions.GetChildren(map1).FirstOrDefault(x => x is MapItemsControl) as MapItemsControl;
if (MIC != null && MIC.ItemsSource != null)
{
   (MIC.ItemsSource as IList).Clear() // clear old collection
   MIC.ItemsSource = null;
}
MIC.ItemsSource = details; // new collection
于 2014-03-29T18:32:42.677 に答える
0

ItemsSource リストのクリアに問題がありました。私の場合の解決策は、Items で Clear を使用していましたが、ItemsSource = null を設定することを忘れないでください。その後、ItemsSource に新しい値を設定できます。もちろん、これは UI スレッドで実行されるため、Dispatcher ブロックで行う必要があります。

于 2013-03-15T11:36:20.117 に答える