我正在使用Caliburn Micro作为MVVM的框架开发一个WPF项目,在上周我很幸运地找到了StackOverflow上任何问题的解决方案,但现在我面临一个更大的问题我自己无法解决。
我有一个包含TreeView的视图;树视图的每个项目都应在以下时间调用方法:
这是TreeView:
makemigrations
附加的ViewModel包含两种方法:
<TreeView x:Name="projectTreeView"
Visibility="{Binding ExplorerVisibility, Converter={StaticResource visibilityConverter}}">
<TreeViewItem Header="{Binding ProjectName}" IsExpanded="True">
<TreeViewItem Header="Category 1"/>
<TreeViewItem Header="Category 2" ItemsSource="{Binding Images}">
<TreeViewItem.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Remove"
cal:Action.TargetWithoutContext="{Binding Path=DataContext, ElementName=projectTreeView}"
cal:Message.Attach="[Event Click] = [Action RemoveResource()]"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</TreeViewItem.ItemContainerStyle>
<TreeViewItem.ItemTemplate>
<HierarchicalDataTemplate>
<HierarchicalDataTemplate.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True" />
<Style.Triggers>
<EventTrigger RoutedEvent="Collapsed">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames
Duration="0"
Storyboard.TargetProperty="(TreeViewItem.IsExpanded)">
<DiscreteBooleanKeyFrame KeyTime="0" Value="True" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</HierarchicalDataTemplate.ItemContainerStyle>
<ContentControl cal:Action.TargetWithoutContext="{Binding Path=DataContext, ElementName=projectTreeView}"
cal:Message.Attach="[Event MouseDoubleClick] = [Action OpenResource(projectTreeView.SelectedItem)]">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ResourceName}" Margin="5,0,0,0"/>
</StackPanel>
</ContentControl>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeViewItem.ItemTemplate>
</TreeViewItem>
</TreeViewItem>
</TreeView>
出于某种原因 OpenResource 工作正常,而当我点击上下文菜单项(右键单击后)时,应用程序崩溃并出现异常:
public class MyViewModel
{
...
public void OpenResource(object obj) { ... }
public void RemoveResource() { ... }
}
我在论坛和支持论坛上发现了与此问题相关的内容,但我无法通过这些提示解决问题。
你对我的TreeView中发生了什么有什么想法吗?
非常感谢您的帮助!
答案 0 :(得分:2)
ContextMenu
位于自己的可视树中,无法使用TreeView
绑定到ElementName
。
您可以尝试将Tag
的{{1}}属性绑定到父TreeViewItem
,然后使用TreeView
的{{1}}属性绑定到它:
PlacementTarget