您好我是WPF开发的新手,并遇到了一个问题,关于使用项目控件通过数据绑定创建的椭圆的鼠标绑定。这是源代码。我的问题是" CLoadModelFromDisk"绑定未执行。在另一个上下文中,Command没有任何问题。
<ItemsControl ItemsSource="{Binding JointsModelPartView}" Grid.Row="1" Grid.Column="1">
<ItemsControl.ItemContainerStyle>
<Style TargetType="FrameworkElement">
<Setter Property="Canvas.Left" Value="{Binding posx1}" />
<Setter Property="Canvas.Top" Value="{Binding posy1}" />
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="Point">
<Ellipse Fill="AntiqueWhite"
Stroke="Black"
Width="10"
Height="10"
Margin="-5,-5,5,5"
>
<Ellipse.InputBindings>
<MouseBinding
Command="{Binding CLoadModelFromDisk}"
Gesture="LeftClick"
/>
</Ellipse.InputBindings>
</Ellipse>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
如果有人可以帮我解决这个问题,那真是太好了。
这是上下文菜单的代码,它不适用于您的解决方案。你知道为什么吗?
<Ellipse.ContextMenu>
<ContextMenu ItemsSource="{Binding DataContext.ContextActionsView, RelativeSource={RelativeSource AncestorType=ItemsControl}}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="Command" Value="{Binding RCommand}"/>
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</Ellipse.ContextMenu>
我已经尝试将相对源设置为标题和命令,但这也不起作用。
答案 0 :(得分:0)
在DataTemplate中,DataContext将是模板中显示的项目 - JointsModelPartView中的项目之一。这些项目是否具有名为CLoadModelFromDisk的ICommand类型的属性?
我的猜测是他们没有,而且CLoadModelFromDisk是与JointsModelPartView相同的视图模型的成员。在这种情况下,您需要不绑定到列表项,而是绑定到属性实际所属的父视图模型。这将是ItemsControl的DataContext - 它必须是,因为ItemsControl能够绑定到JointsModelPartView。
试试这个:
<MouseBinding
Command="{Binding DataContext.CLoadModelFromDisk, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
Gesture="LeftClick"
/>