ItemsControl和命令

时间:2014-05-19 07:16:43

标签: c# wpf mvvm

我的项目中有一个包含少量PathGeometries的itemscontrol,一切都运行良好。现在我想使用Interaction.Triggers将“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);
}

1 个答案:

答案 0 :(得分:1)

这里的问题是该项的datacontext不是您的主视图模型(放置Selected命令的地方)

你应该改变你的绑定:

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