我已經用對象填充了一個ListView,並且已經將一個ContextMenu綁定到了我的ListView中的這些項目。 ContextMenu只能通過點擊一個項目來打開。問題是Caliburn Micro拋出一個錯誤,它無法找到ShowProperties()的目標方法。Caliburn Micro在ListView中找不到ContextMenu中的DataContext
我認爲會發生此問題,因爲Caliburn沒有可用的ViewModel的正確DataContext。我試過#2許多解決方案,使視圖模型提供給文本菜單項,但無濟於事例如:
WPF: Binding a ContextMenu to an MVVM Command
「No target found for method」 thrown by Caliburn Message.Attach()
WPF Context Menus in Caliburn Micro
這是我的看法的XAML代碼:
<Window x:Class="CueMaster.Views.AppView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dragDrop="clr-namespace:GongSolutions.Wpf.DragDrop;assembly=GongSolutions.Wpf.DragDrop"
xmlns:cal="http://www.caliburnproject.org"
Height="500" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ListView Grid.Column="1" Margin="5"
ItemsSource="{Binding Cues}"
dragDrop:DragDrop.IsDragSource="True"
dragDrop:DragDrop.IsDropTarget="True"
dragDrop:DragDrop.DropHandler="{Binding}">
<ListView.Resources>
<ContextMenu x:Key="ItemContextMenu">
<MenuItem Header="Properties" cal:Message.Attach="ShowProperties($dataContext)" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}">
<MenuItem.Icon>
<Image Source="../PropertyIcon.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}" >
<Setter Property="ContextMenu" Value="{StaticResource ItemContextMenu}" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView >
<GridViewColumn Width="70" Header="Cue" DisplayMemberBinding="{Binding Id}" />
<GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Width="100" Header="Description" DisplayMemberBinding="{Binding Description}" />
<GridViewColumn Width="70" Header="Duration" DisplayMemberBinding="{Binding Duration}" />
<GridViewColumn Width="70" Header="Elapsed" DisplayMemberBinding="{Binding Elapsed}" />
<GridViewColumn Width="70" Header="Remaining" DisplayMemberBinding="{Binding Remaining}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
我錯過了什麼?
謝謝,但遺憾的是它仍然沒有找到ShowProperties方法,有或沒有$ DataContext的..我得到的消息PlacementTarget的該標籤不能在數據上下文類型System.Windows來解決。 UIElement,可能導致這種情況的任何事情? –
您的項目結構如何?分離組件?容器類型(如果有)? – mvermef
我使用NuGet引用了Caliburn.Micro和Caliburn.Micro.Platform包。我正在使用正常的Caliburn結構;視圖和ViewModels目錄。完整的視圖XML就像我發佈的那樣。我不確定容器類型是什麼意思。 –