我的问题与此非常相似:(Binding events to buttons in an ItemsControl),但我在那里没有找到解决方案.
我有一个ItemsControl,在其DataTemplate中,我还有另一个ItemsControl.外部控件中的项目包含具有某些属性的类,并且这些属性之一是一个集合.内部ItemsControl源绑定到此集合,内部控件DataTemplate内部有一个Button.
我的问题是,当我为按钮连接事件(.. Click =“ dummyfunc”)并尝试运行该项目时,我收到未处理的XamlParseException(4004),并说“无法分配给属性’System.Windows” .Controls.Primitives.ButtonBase.Click’“
我在将外部ItemsControl放置在Xaml中的页面的CodeBehind中声明了事件处理程序.对于放置在外部控件DataTemplate中的按钮,它也可以正常工作.但是在内部控件模板中,我无法连接任何事件.
一件事有效:
<HyperlinkButton Content="x">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ei:CallMethodAction MethodName="DeleteMe" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</HyperlinkButton>
但这只会触发在我上面提到的项目中实现的方法(DeleteMe),该方法具有一些属性和一个集合.
但是,除此以外,我需要使用常规方法处理内部控件中的事件:
public void dummyfunc(object sender, RoutedEventArgs e){...}
(因此我可以获取触发事件的按钮,例如:
sender as HyperinkButton
要么
e.OriginalSource as HyperlinkButton
我想问题是事件没有冒泡并且我得到了解析异常,因为解析器无法在实际范围内找到事件处理程序声明,这显然不是内部控件的CodeBehind