gpt4 book ai didi

c# - 将事件绑定(bind)/连接到嵌套在 ItemsControls DataTemplate 中的 ItemsControl 中的按钮

转载 作者:行者123 更新时间:2023-11-30 16:27:26 27 4
gpt4 key购买 nike

我的问题与此非常相似:( Binding events to buttons in an ItemsControl ) 但我没有在那里找到解决方案。我有一个 ItemsControl,在它的 DataTemplate 中,我有另一个 ItemsControl。外部控件中的项目包含具有某些属性的类,其中一个属性是一个集合。内部 ItemsControl 源绑定(bind)到此集合,内部控件 DataTemplate 内部有一个 Button。

我的问题是,当我为按钮 (.. Click="dummyfunc") 连接一个事件并尝试运行该项目时,我得到一个未处理的 XamlParseException (4004) 并提示“无法分配给属性” System.Windows.Controls.Primitives.ButtonBase.Click'”我在 Xaml 中放置外部 ItemsControl 的页面的代码隐藏中声明了我的事件处理程序。它适用于放置在外部控件 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

我想问题是事件没有冒泡,我得到了解析异常,因为解析器在实际范围内找不到事件处理程序声明,这显然不是内部控件的代码隐藏:(

我需要这个的原因是因为我想在代码中做一些自定义 UI 逻辑,并仅在此之后以某种方式触发 DeleteMe 逻辑。

谢谢,巴林特

最佳答案

CallMethodAction 的 spartan 文档并不明显, 但由 MethodName 属性命名的方法可以具有以下任一签名:

  • 无效方法()
  • void Method(object associatedObject, object parameter)

此外,EventTrigger 操作的默认参数 是通常作为第二个参数传递给事件处理程序的事件参数值。对于 Click 事件,参数的类型是 RoutedEventArgs 因此您可以像这样定义您的 DeleteMe 方法:

public void DeleteMe(object sender, RoutedEventArgs e)
{
Debug.WriteLine("sender: {0}", sender);
Debug.WriteLine("e.OriginalSource: {0}", e.OriginalSource);
}

这使您可以在处理 Click 事件时访问所需的所有信息。

关于c# - 将事件绑定(bind)/连接到嵌套在 ItemsControls DataTemplate 中的 ItemsControl 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7910237/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com