项目控制和命令
本文关键字:命令 控制 项目 | 更新日期: 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}"/>