c# - 如何将事件触发器添加到业务对象的数据模板?

标签 c# wpf events datatemplate eventtrigger

我有一个名为 BlinkingLight 的自定义类。 我还有一个静态 ObservableCollection BlinkingLightCollection。 在 UI 中,我有一个绑定(bind)到 BlinkingLightCollection 的 ListBox。

在我的 ListBox 中,我希望将每个 BlinkingLight 对象基本上显示为自定义控件,该控件看起来像带有 LED 灯的盒子,该控件具有动画,使 LED 看起来就像只闪烁了一秒钟然后恢复正常。

我的 BlinkingLight 类具有第三方“LED”对象,该对象会引发名为“Flash”的事件。

我正在寻找想法或解决方案来使其发挥作用!

我失败的尝试:

我创建了一个自定义控件 (BlinkingLightControl),当 BlinkingLight 是我的自定义控件的 DataContext 时,它可以绑定(bind)到我的 BlinkingLight 类的数据。

我为列表框创建了一个数据模板:

<Window.Resources>
  <DataTemplate x:Key="blinkingLightItemTemplate" >
    <local:BlinkingLightControl />
  </DataTemplate>
</Window.Resources>

<ListBox ItemsSource={Binding Source={x:Static local:Data.BlinkingLightCollection}}
         ItemTemplate="{StaticResource blinkingLightItemTemplate}" />

注意:我可以将自定义控件的 xaml 放入数据模板中,而不是使用完全不同的控件(如果这样可以让事情变得更容易)。

现在我想在我的 BlinkingLightControl(或 DataTemplate)中有一个 EventTrigger,其 RoutedEvent 是 LED.Flash 事件。不幸的是我似乎无法弄清楚这部分。我尝试在 BlinkingLight 类中创建一个 RoutedEvent,并在处理 LED.Flash 事件时引发它。但是我的类不是 UIElement 或 ContentElement,根据 MSDN:MSND Link

“路由事件所有者可以是任何类,但路由事件必须由 UIElement 或 ContentElement 派生类引发并处理才能发挥作用。有关自定义事件的详细信息,请参阅如何:创建自定义路由事件”

任何帮助将不胜感激! 谢谢, 斯科特

最佳答案

在这种情况下,最好的方法是使用 WPF Commanding 并创建一个“BlinkTheLights”RouteCommand - 您的 BlinkingLightControl 将处理 BlinkTheLights 命令,并通过启动使灯闪烁的 StoryBoard 进行响应。

关于c# - 如何将事件触发器添加到业务对象的数据模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422943/

相关文章:

c# - Foreach 语句无法对 'object' 类型的变量进行操作,因为 'object' 不包含 'GetEnumerator' 的公共(public)定义

wpf - WPF 中 VisualTreeHelper.HitTest 的问题

.net - 内存利用率 : WPF vs Windows Forms

javascript - 需要制作一个 javascript 数组来讲述一个故事

c# - WinForm 尝试提交来自 CellValueChanged 事件的 DataGridView 更改

firefox - Angular2 输入文件 onChange 事件在 Firefox 中不起作用

c# - 我可以将应用程序上传到 Windows 应用商店而不使用 .net native 工具链进行编译吗?

c# - 如何使用带参数的函数作为事件处理程序?

c# - 如何根据XML文件自动生成WPF控件?

c# - XMLRPC c# 客户端到 python 客户端 - 方法不存在