动态上下文菜单XAML,其中项目位于observablecollection中

时间:2017-05-23 10:41:32

标签: c# wpf xaml

我正在创建一个应用程序,我在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>

1 个答案:

答案 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