[英]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.