我正在创建一个应用程序,我在WPF上有一个地图,用户可以通过双击选择点(完成并工作!);但是,我还希望当用户右键单击它时,将打开contextMenu(或类似的somtething)并显示标记的名称(标记是用户在地图上用纬度,经度选择的点的已定义类别& Name atributes)。
这是主要的想法,为此我创建了一个可观察的Markers类集合,但我无法将它绑定到ContextMenu。所以,我希望当用户右键点击地图时,菜单会显示标记的所有名称,当用户点击它们时,将使用一些方法。
如何绑定所有这些动态项并准备代码,以便能够为单击时显示的所有项创建方法?用户可以随时选择更多标记,以便更新。
在此先感谢,我已经坚持了几个星期。
这里显示代码:
MapMarker类:
{ class MapMarker
{
public string Name { get;set;} // Marker name
public double Latitude { get; set;} // Latitude coordinate
public double Longitude { get; set; } // Longitude coordinate
public int Posicio { get; set; } // Mapmarker location inside the list of pushpins
public Image Icona { get; set; } // Mapmarker icon
public string Comanda { get; set; } // Command when clicked
}
}
可观察的集合类:
class OCollMapMarker : ObservableCollection<MapMarker>
{
public MapMarker Mmarker { get; set; }
}
代码落后.cs :(完全填充可观察的集合)
MapMarker mpker= new MapMarker();
mpker.Name = nameppin;
mpker.Posicio = poslist;
mpker.Latitude = valuep.Location.Latitude;
mpker.Longitude = valuep.Location.Longitude;
mpker.Icona = iconap;
mpker.Comanda = comanpin;
PushpCollect.Add(mpker);
XAML :(这是我应该绑定的地方,但我尝试了多次思考而不是工作)
<WPF:Map.ContextMenu>
<ContextMenu Name="Rclik" #####BINDHERE#####>
<ContextMenu.Style>
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="OverridesDefaultStyle" Value="False"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
</Style>
</ContextMenu.Style>
答案 0 :(得分:0)
如果PushpCollect
是在窗口的代码隐藏中定义的公共属性(但不是字段),您应该能够像这样绑定它:
<ContextMenu Name="Rclik" ItemsSource="{Binding PushpCollect, RelativeSource={RelativeSource AncestorType=Window}}">
<ContextMenu.Style>
<Style TargetType="{x:Type ContextMenu}">
<Setter Property="OverridesDefaultStyle" Value="False"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderBrush" Value="Transparent"/>
</Style>
</ContextMenu.Style>
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Name}" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
但在提问时请始终提供完整的可重复样本:https://stackoverflow.com/help/mcve