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

标签 c# silverlight xaml

我的问题与此非常相似:( 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/

相关文章:

c# - 如何在给定的持续时间内为贝塞尔曲线设置动画

c# - 在 silverlight xaml c# 中只有两个圆角的图像

c# - 为什么我的 XAML 代码没有运行?

xaml - UserControl 上的 MVVMLight ViewModelLocator

c# - IComparable 是在字典中强制使用唯一键的最佳方式吗?

c# - 将 ASP.NET 应用程序移植到 Linux 下的 Mono/Apache

c# - TempData Like Object in WebForms - 只有 1 个附加请求的 session 状态

wpf - ViewModel 可以与 MVVM 模式中的 View 对话吗?

c# - 导航转换 - Windows Phone 工具包

c# - 当输入的文本不是数据源的一部分时处理 WPF 可编辑组合框