gpt4 book ai didi

C# WPF Caliburn Micro TreeViewItem.Expanded 事件未触发

转载 作者:行者123 更新时间:2023-12-03 10:17:21 26 4
gpt4 key购买 nike

我正在使用 Caliburn Micro Message.Attach 通过 XAML 尝试将事件绑定(bind)到 View 模型,但我无法获得 TreeViewItem.Expanded事件触发。其他事件如 SetSelectedItem工作正常。

我在 SO here 上发现了另一个问题但这对我的情况没有帮助,因为没有提供响应的上下文。

我能找到的唯一其他信息是以下 GitHub issue .

Internally Caliburn.Micro turns <Button cm:Message.Attach="[Event Click] = [Action Test]" />

into

<Button>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cm:ActionMessage MethodName="Test" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

As you noted, EventTrigger doesn't support attached events. A quick look around brought up How to attached an MVVM EventToCommand to an Attached event which shows how to create a RoutedEventTrigger that you could plug into the full syntax.



同样,我尝试了这种方法,但不完全理解如何实现它。它在自定义类中触发事件,但永远不会传递给我在 View 模型中的处理程序。

这是我的 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>

我的 View 模型代码:
    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 对我不起作用,因为我的数据项是字符串。就我而言,它是文件资源管理器样式的 TreeView 。对于上下文,这是完整的 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>

关于C# WPF Caliburn Micro TreeViewItem.Expanded 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60497962/

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