当我在Xaml中为Windows 8应用程序传递数据绑定时,我在提取一些我需要的信息时遇到了一些麻烦。
我在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上有一个动作控件“Tapped”,它可以正常工作,它会创建一个弹出窗口并显示一张图片。但是我想将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
}
答案 0 :(得分:0)
尝试
var pushpinData = (sender as FrameworkElement).DataContext as PushpinModel;
这就是我通常这样做的原因,因为你并不总是知道发件人的类型是什么,但对我来说它似乎是图钉......