项目控制和命令

本文关键字:命令 控制 项目 | 更新日期: 2023-09-27 18:04:11

我在我的项目中有一个itemscontrol,其中包含几个PathGeometries,一切都工作得很好。现在我想分配一个"MouseDown"事件到使用交互的路径之一。但是它根本没有触发命令,我找不到原因。

 <ItemsControl x:Name="CSListItem"  ItemsSource="{Binding Path=ColorCode}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>                  
                <VirtualizingStackPanel Orientation="Horizontal">                     
                    <Path Stroke="Black" StrokeThickness="1">
                        <Path.Data>
                            <RectangleGeometry Rect="{Binding Path=RectPoints}"/>
                        </Path.Data>
                    </Path>
                      <Path Fill="Black" Stroke="Black">
                         <i:Interaction.Triggers>
                            <i:EventTrigger EventName="MouseDown">
                             <i:InvokeCommandAction Command="{Binding Path=Selected}"/>
                            </i:EventTrigger>
                        </i:Interaction.Triggers>
                        <Path.Data>
                            <RectangleGeometry Rect="{Binding Path=Lines}"/>
                        </Path.Data>
                </VirtualizingStackPanel>
             </DataTemplate>
        </ItemsControl.ItemTemplate>

所有的绑定都在工作,除了它没有触发任何MouseDown事件

//ViewModel
Public RelayCommand Selected {get;private set;} 
void ExecuteSelected(object parameter)
{
 // my logic
} 
Public myViewModel()
{
 Selected = new RelayCommand(ExecuteSelected);
}

项目控制和命令

这里的问题是项目的数据上下文不是您的主视图模型(Selected命令放置的地方)

你应该这样修改你的绑定:

<i:InvokeCommandAction Command="{Binding Path=DataContext.Selected, ElementName=CSListItem}"/>