我得到了一个非常类似的问题,只有ListViewItem的ContextMenu,但解决方案似乎不适合我的情况。
<GroupBox Header="PlayOffs" Grid.Row="2" Grid.Column="0">
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ListView Grid.Column="0" ItemsSource="{Binding PlayoffSeries}" ItemTemplate="{StaticResource SeriesTemplate}">
<ListView.Resources>
<ContextMenu x:Key="cm">
<MenuItem Header="SetLive" Click="SetSeriesLive"/>
<MenuItem Header="Start" IsEnabled="{Binding Path=DataContext.CanStart, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}}" Click="StartSeries"/>
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="ContextMenu" Value="{StaticResource cm}"/>
<EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
</ScrollViewer>
</StackPanel>
</GroupBox>
我得到一个错误为菜单项Start
的IsEnabled
绑定说Cannot find source:RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ListView',AncestorLevel='1'
click命令像一个魅力符一样工作,本质上我想做的是将菜单项的IsEnabled属性绑定到listviewItem提供的底层数据上下文的CanStart
属性。
我是个笨蛋。我刚刚尝试了AncestorType=ContextMenu
,它似乎很有魅力。但仍然不完全确定为什么第一个解决方案对另一个问题有效。我想这与绑定到listview的数据模型有关。