MVVM 灯 - 带图钉的中继命令



我正在将数据绑定一些图钉到MapLayer。 它们显示正常,但是当我使用 relaycommand 从鼠标 leftbuttonUp 传递事件参数时,对象源是一个 elipse。 我已经在MapPolygon上使用过这种方法,并从对象中获取了我想要的信息。

也许我因为刚接触 mvvm 而对此感到非常不满,所以请告诉我!

这适用于我的地图多边形

(vm 引用我的扩展地图多边形类的命名空间)

    <DataTemplate x:Name="polyTemplate">
        <vm:extendedMapPolygon cName="{Binding _cName}" Locations="{Binding _Locations}" />
    </DataTemplate>

下面是映射层中的 XAML

    <m:MapItemsControl ItemTemplate="{StaticResource polyTemplate}" ItemsSource="{Binding  Path=_PolyforDisplay, Mode=TwoWay}"  >
        <i:Interaction.Triggers>
               <i:EventTrigger EventName="MouseLeftButtonUp">
                    <cmd:EventToCommand Command="{Binding Path=PolySelCommand}" PassEventArgsToCommand="True" ></cmd:EventToCommand>
               </i:EventTrigger>
        </i:Interaction.Triggers>
    </m:MapItemsControl>

在我看来模型构造函数

PolySelCommand = new RelayCommand<MouseButtonEventArgs>(PolySelCommandExecute);

最后是实际命令

        public RelayCommand<MouseButtonEventArgs> PolySelCommand { get; set; }
    private void PolySelCommandExecute(MouseButtonEventArgs cmp)
    {
        Polygon poly = cmp.OriginalSource as Polygon;
        extendedMapPolygon ePoly = poly.Parent as extendedMapPolygon;
        _MapPolygonSelected =  ePoly.cName;
    }

(我把这个放在这里是为了展示我目前正在使用的方法,并希望它对其他人有用!

但是,当我用图钉尝试同样的事情时,cmp。OriginalSource是一个椭圆,我似乎无法通过任何其他内容。

我的图钉代码

(我只是在此代码中使用地图控件中的图钉)

    <DataTemplate x:Name="ppTemplate">
        <m:Pushpin ToolTipService.ToolTip="{Binding _psName}" Location="{Binding _Location}" />
    </DataTemplate>
    <m:MapItemsControl ItemTemplate="{StaticResource ppTemplate}" ItemsSource="{Binding Path=_PinsforDisplay, Mode=TwoWay}">
        <i:Interaction.Triggers>
             <i:EventTrigger EventName="MouseLeftButtonUp">
                  <cmd:EventToCommand Command="{Binding Path=pinSelCommand}" PassEventArgsToCommand="True" ></cmd:EventToCommand>
             </i:EventTrigger>
        </i:Interaction.Triggers>
    </m:MapItemsControl>

我应该使用命令参数吗? 或者当我单击图钉时将文本传递到我的视图模型的其他方式,这是我真正想要的。

我会将触发器移动到图钉元素。

    <DataTemplate x:Name="ppTemplate">
        <m:Pushpin ToolTipService.ToolTip="{Binding _psName}" Location="{Binding _Location}">
             <i:Interaction.Triggers>
                    <i:EventTrigger EventName="MouseEnter">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseLeftButtonUp">
                                <cmd:EventToCommand Command="{Binding Path=DataContext.pinSelCommand}" 
                                                    CommandParameter="{Binding WhateverPropertyHasTheText" />
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
        </m:Pushpin>
    </DataTemplate>

请注意,我将要从_PinsForDisplay中的对象发送的任何属性作为命令参数传递。此外,命令的绑定略有更改,因为绑定与数据模板内部不同。

然后,您必须将视图模型上的RelayCommand更改为RelayCommand。

我没有测试这段代码,但是非常相似的东西对我有用,所以希望它可以引导您找到解决方案。

相关内容

  • 没有找到相关文章

最新更新