![](/img/trans.png)
[英]C# WPF TreeViewItem MouseDoubleClick event on TreeViewItem with TreeViewItem.Header
[英]C# WPF Caliburn Micro TreeViewItem.Expanded Event Not Firing
我正在使用 Caliburn Micro Message.Attach 通过 XAML 尝试将事件绑定到视图模型,但我无法触发TreeViewItem.Expanded
事件。 SetSelectedItem
等其他事件工作正常。
我在 SO here上发现了另一个关于此的问题,但在我的情况下没有帮助,因为没有提供响应的上下文。
我能找到的唯一其他信息是以下 GitHub问题。
在内部 Caliburn.Micro 变成
<Button cm:Message.Attach="[Event Click] = [Action Test]" />
进入
<Button> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <cm:ActionMessage MethodName="Test" /> </i:EventTrigger> </i:Interaction.Triggers> </Button>
正如您所指出的,EventTrigger 不支持附加事件。 快速浏览一下如何将 MVVM EventToCommand 附加到一个附加事件,它展示了如何创建一个可以插入完整语法的 RoutedEventTrigger。
同样,我尝试了这种方法,但并不完全了解如何实现这一点。 它在自定义类中触发事件,但永远不会传递给我在视图模型中的处理程序。
这是我的 XAML(没有 GitHub 建议):
<TreeView x:Name="FolderView"
cal:Message.Attach="[Event TreeViewItem.Expanded] = [Action Expanded($this)];
[Event SelectedItemChanged] = [Action SetSelectedItem($this.SelectedItem)]">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type models:LogicalDriveItem}"
ItemsSource="{Binding Directories}" >
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" Text="{Binding Path=DriveLetter}"></TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type models:DirectoryItem}"
ItemsSource="{Binding Directories}">
<TextBlock VerticalAlignment="Center" Text="{Binding Path=Path}"></TextBlock>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
我的视图模型代码:
public void Expanded(object sender, RoutedEventArgs e)
{
// This won't fire
}
public void Expanded(object sender)
{
// Or this
}
public void SetSelectedItem(object sender)
{
// But this will
}
mm8 提供的链接解决了我的问题。
该问题中的 OP 使用的是我在 GitHub 上找到的相同 RoutedEventTrigger 帮助器类,但他们的答案提供的附加上下文很有帮助。 使用 RoutedEventTrigger 帮助器类,我将 XAML 更新为以下内容:
<i:Interaction.Triggers>
<!--in the routed event property you need to put the full name space and event name-->
<helpers:RoutedEventTrigger RoutedEvent="TreeViewItem.Expanded">
<cal:ActionMessage MethodName="Expanded">
<cal:Parameter Value="$eventArgs" />
</cal:ActionMessage>
</helpers:RoutedEventTrigger>
</i:Interaction.Triggers>
现在在 ViewModel 代码中成功触发了我的事件。
请注意, $this 对我不起作用,因为我的数据项是一个字符串。 就我而言,它是文件资源管理器样式的树视图。 对于上下文,这里是完整的 XAML:
<TreeView x:Name="FolderView">
<i:Interaction.Triggers>
<!--in the routed event property you need to put the full name space and event name-->
<helpers:RoutedEventTrigger RoutedEvent="TreeViewItem.Expanded">
<cal:ActionMessage MethodName="Expanded">
<cal:Parameter Value="$eventArgs" />
</cal:ActionMessage>
</helpers:RoutedEventTrigger>
</i:Interaction.Triggers>
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type models:LogicalDriveItem}"
ItemsSource="{Binding Directories}" >
<StackPanel Orientation="Horizontal">
<!--<Image MaxWidth="20" Source="Images/Image.png"/>-->
<TextBlock VerticalAlignment="Center" Text="{Binding Path=DriveLetter}"></TextBlock>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type models:DirectoryItem}"
ItemsSource="{Binding Directories}">
<TextBlock VerticalAlignment="Center" Text="{Binding Path=Name}"></TextBlock>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.