1

Windows 8アプリのXamlでデータバインディングを渡すときに、必要な情報を抽出するのに少し問題があります。

ここにapp.xamlで設計されたデフォルトのテンプレートがあります:

 <DataTemplate x:Key="PinTemplate">
            <bm:Pushpin Name="{Binding img}" IsTapEnabled="True" >
                <bm:MapLayer.Position>
                    <bm:Location Latitude="{Binding Latitude}" Longitude="{Binding Longitude}" />
                </bm:MapLayer.Position>
            </bm:Pushpin>
 </DataTemplate>

上記のバインディングから個々の「img」文字列にアクセスしたいと思います。私のマップには、次のようにitemcontrolが埋め込まれています。

 <Maps:Map Name="london" HorizontalAlignment="Left" Height="546" Margin="78,34,0,0" Grid.Row="1"       VerticalAlignment="Top" Width="806" Credentials="{StaticResource BingCredentials}" RenderTransformOrigin="0.439,0.282">
        <Maps:Pushpin Name="myPin" Height="100" Width="100"/>
        <Maps:MapItemsControl ItemTemplate="{StaticResource PinTemplate}" ItemsSource="{Binding PushpinCollection}" Height="100" Width="100" Tapped="pushPin_Tapped"/>
        <Popup VerticalOffset="200"  HorizontalOffset="300" x:Name="Image" IsLightDismissEnabled="True" Height="2000" Width="2000" >
            <Image Name="myImage" Height="300" Width="300" Source="Assets/Logo.png"/>
        </Popup>
    </Maps:Map>

そしてその背後にあるC#は次のとおりです。

 public class PushpinModel
    {
        public double Longitude { get; set; }
        public double Latitude { get; set; }
        public string img { get; set; }
    }

  public ObservableCollection<PushpinModel> PushpinCollection { get; set; }

  PushpinCollection = new ObservableCollection<PushpinModel>();

        PushpinCollection.Add(new PushpinModel() { Latitude = templat[0], Longitude = templng[0], img = names[0] });
        PushpinCollection.Add(new PushpinModel() { Latitude = templat[1], Longitude = templng[1], img = names[1] });
        DataContext = this;

現在のところ、MapsItemcontrolに「タップ」されたアクションコントロールがあり、正しく機能し、ポップアップを作成して画像を表示します。ただし、特定の画鋲に表示する画像を指定できるように、imgの情報をアクションコントローラーに渡したいと思います。以下のようにしようとしましたが、返されるデータコンテキストはitemscontrol全体のものだと思いますが、pushpincollectionの個々のインスタンスのデータテンプレート内のプロパティにアクセスするにはどうすればよいですか?ありがとう

     private void pushPin_Tapped(object sender, TappedRoutedEventArgs e)
    {
           if (!Image.IsOpen) { Image.IsOpen = true; }
              var pushpinData = (sender as Pushpin).DataContext as PushpinModel;
              String file = pushpinData.ToString();
              // use image in popup here
    }
4

1 に答える 1

0

試す

var pushpinData = (sender as FrameworkElement).DataContext as PushpinModel;

それが私が通常行う方法です。送信者のタイプが常にわからないためですが、私にはそれが画鋲のようです。

于 2013-02-13T15:25:42.583 に答える