1

Bing Maps コントロールと共に WP7 で MvvmCross を使用しているアプリを作成しています。タイプのプロパティを含む of にMapItemsControl ItemSourceObservableCollectionバインドしようとしています。場所の緯度と経度に関する情報を含む単純なクラスです。に入力する場所は、リッスンするサービスによって取得され、場所が取得されるとコレクションが更新されます。地図上に場所が表示されていないため、機能していないようですが。sをバインドするために、 が理解できるものに単純に変換するコンバーターを作成しました。プロパティにバインドするためにコンバーターを使用しているため、コンバーターが機能することはわかっています。LocationDataSourceMapPositionGeoPointGeoPointObservableCollectionViewModelGeoPointGeoCoordinateMapItemsControlMap Center

バインディングは次のようになります。

<maps:MapItemsControl x:Name="mapControl" ItemsSource="{Binding Locations}">
    <maps:MapItemsControl.ItemTemplate>
        <DataTemplate>
            <maps:Pushpin Location="{Binding MapPosition, Converter={StaticResource GeoPoint}}" Template="{StaticResource pinSiteLoc}" />
        </DataTemplate>
    </maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>

ビューモデルは次のようになります。

private ObservableCollection<LocationDataModel> _locations;
public ObservableCollection<LocationDataModel> Locations
{
    get { return _locations; } 
    set
    {
        _locations = value;
        FirePropertyChanged(() => Locations);
    }
}

Locationsコレクションを更新するさまざまな方法を試しました。これは、がロードされて準備が整っViewModelた後、イベントハンドラーで実行されます。これは機能すると想定しました。ViewModel

Locations = LocationDataService.Locations;

LocationDataService.Locations空ではなく、実際の場所が含まれていることを確認しました。ViewModelまた、コレクションをコンストラクターでインスタンス化してから、各要素をコレクションにインスタンス化しようとしましたaddが、マップにも何も表示されませんでした。

編集 コメントのリクエストに従って。このような場所をLocations = new ObservableCollection<LocationDataModel>();ViewModelコンストラクターのようにインスタンス化されたコレクションに追加しようとしました。次に、イベントハンドラーで次のように設定されました。

private void LocationDataServiceOnLoadingChanged(object sender, EventArgs eventArgs)
{
    if (LocationDataService.IsInventoryLoaded)
    {
        foreach (var location in LocationDataService.Locations)
        {
            Locations.Add(location);
        }
    }
}

ここで私が間違っていることを誰かが見ることができますか?

4

1 に答える 1

1

質問に対するコメントで述べたように、xaml ファイルにエラーが見つかりました。ここで、次のMapようにコントロール タグを途中で閉じました。

<maps:Map
    (..)
    />
<maps:MapItemsControl x:Name="mapControl" ItemsSource="{Binding Locations}">
    <maps:MapItemsControl.ItemTemplate>
        <DataTemplate>
            <maps:Pushpin Location="{Binding MapPosition, Converter={StaticResource GeoPoint}}" Template="{StaticResource pinSiteLoc}" />
        </DataTemplate>
    </maps:MapItemsControl.ItemTemplate>
</maps:MapItemsControl>

代わりに、次のようにする必要がありました。

<maps:Map
    (..)
    >
    <maps:MapItemsControl x:Name="mapControl" ItemsSource="{Binding Locations}">
        <maps:MapItemsControl.ItemTemplate>
            <DataTemplate>
                <maps:Pushpin Location="{Binding MapPosition, Converter={StaticResource GeoPoint}}" Template="{StaticResource pinSiteLoc}" />
            </DataTemplate>
        </maps:MapItemsControl.ItemTemplate>
    </maps:MapItemsControl>
</maps:Map>
于 2012-09-20T14:18:40.693 に答える