C# 从XAML中的单击事件中从ViewModel中定义的集合中删除项

C# 从XAML中的单击事件中从ViewModel中定义的集合中删除项,c#,wpf,xaml,events,mvvm,C#,Wpf,Xaml,Events,Mvvm,我有一个ItemsControl,它由DataTemplate中定义的项填充,并放置在画布上。我希望能够在画布上的其中一个项目上使用右键单击事件将其从包含的集合中删除,该集合位于我的ViewModel中。我一直在尝试与MVVM Light的EventToCommand合作,以找出一种方法,但到目前为止,我什么也没想到。我不知道还能尝试什么,所以我来这里寻求帮助。如有任何建议,将不胜感激 <DataTemplate DataType="{x:Type model:Player}">

我有一个ItemsControl,它由DataTemplate中定义的项填充,并放置在画布上。我希望能够在画布上的其中一个项目上使用右键单击事件将其从包含的集合中删除,该集合位于我的ViewModel中。我一直在尝试与MVVM Light的EventToCommand合作,以找出一种方法,但到目前为止,我什么也没想到。我不知道还能尝试什么,所以我来这里寻求帮助。如有任何建议,将不胜感激

<DataTemplate DataType="{x:Type model:Player}">
        <Canvas>               
            <Grid Canvas.Left="{Binding Location.X}"
                  Canvas.Top="{Binding Location.Y}"
                  MouseLeftButtonDown="Grid_MouseLeftButtonDown"
                  MouseLeftButtonUp="Grid_MouseLeftButtonUp"
                  MouseMove="Grid_MouseMove">
                <Grid.LayoutTransform>
                    <RotateTransform Angle="-90" />
                </Grid.LayoutTransform>
                <Ellipse Width="12"
                         Height="12" 
                         Fill="{Binding PrimaryColor}" />
                <TextBlock HorizontalAlignment="Center"
                           VerticalAlignment="Center"
                           FontSize="6"
                           FontWeight="Bold"
                           Foreground="Black"
                           Text="{Binding Position.Abbreviation}" />
            </Grid>
        </Canvas>
    </DataTemplate>

<Canvas x:Name="myCanvas"
        Width="1440"
        Height="640"
        AllowDrop="True"
        Background="Green"
        Focusable="True">
    <ContentPresenter Content="{Binding Field}" />
    <ItemsControl ItemsSource="{Binding Team.Players}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas AllowDrop="True" Background="Transparent" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>
</Canvas>

您可以使用带有Remove
菜单项的
上下文菜单
。然后,您可以在
视图模型上使用
命令
RemoveCommand
。您可以像下面这样将
MenuItem
命令绑定到VM命令,并在
CommandParameter
中发送所选项目。在命令处理程序中,可以从集合中删除该项

<DataTemplate DataType="{x:Type model:Player}">
    <Canvas>               
        <Grid Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}} Canvas.Left="{Binding Location.X}"
              Canvas.Top="{Binding Location.Y}"
              MouseLeftButtonDown="Grid_MouseLeftButtonDown"
              MouseLeftButtonUp="Grid_MouseLeftButtonUp"
              MouseMove="Grid_MouseMove">
            <Grid.ContextMenu>
                <ContextMenu>
                        <MenuItem Header="Remove" 
                         Command="{Binding PlacementTarget.Tag.RemoveCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" 
                         CommandParameter="{Binding PlacementTarget.DataContext, 
          RelativeSource={RelativeSource FindAncestor, 
          AncestorType={x:Type ContextMenu}}}"/>
                    </ContextMenu>
            </Grid.ContextMenu>
            <Grid.LayoutTransform>
                <RotateTransform Angle="-90" />
            </Grid.LayoutTransform>
            <Ellipse Width="12"
                     Height="12" 
                     Fill="{Binding PrimaryColor}" />
            <TextBlock HorizontalAlignment="Center"
                       VerticalAlignment="Center"
                       FontSize="6"
                       FontWeight="Bold"
                       Foreground="Black"
                       Text="{Binding Position.Abbreviation}" />
        </Grid>
    </Canvas>
</DataTemplate>


您希望右键单击具有“删除”选项的上下文菜单来删除特定项目吗?单击鼠标右键或上下文菜单都可以。从长远来看,上下文菜单可能会更好地为我服务。