Я работаю над проектом WPF с использованием Caliburn Micro в качестве основы для MVVM, и на прошлой неделе мне посчастливилось найти любое решение любой проблемы на StackOverflow, но теперь у меня большая проблема, которую я не могу решить сам.Caliburn Micro Action внутри ItemContainerStyle - не найдена цель для метода
У меня есть вид, содержащий TreeView; каждый элемент в TreeView должен вызвать метод, когда:
- это дважды щелкнуть мышью [работает]
- въездной его контекстного меню нажата [не работает]
Это TreeView:
<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>
В прилагаемой модели представления содержит оба метода:
public class MyViewModel
{
...
public void OpenResource(object obj) { ... }
public void RemoveResource() { ... }
}
По какой-то причине OpenResource прекрасно работает, в то время как при нажатии на пункт контекстного меню (после правой кнопкой мыши) сбои приложений, за исключением:
An unhandled exception of type 'System.Exception' occurred in WindowsBase.dll
Additional information: No target found for method RemoveResource.
я нашел что-то связано с той же проблемой здесь форум и форум поддержки, но я не смог решить проблему с этими советами.
У вас есть идеи о том, что происходит в моем TreeView?
Большое спасибо за помощь!
ли RemoveResource() должен иметь параметр объекта OBJ? – gabba
http://caliburnmicro.codeplex.com/discussions/287228 Проверьте, работает ли это для вас (последнее сообщение EisenbergEffect). – ShadeOfGrey