尝试访问自定义列表视图上下文菜单的数据上下文时绑定找不到源
Binding cannot find source when trying to access the datacontext of a custom listview contextmenu
我遇到了与 ContextMenu for ListViewItem only 非常相似的问题,但解决方案似乎对我的情况不起作用。
<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'
点击命令就像一个魅力,基本上我想做的是将菜单项的 IsEnabled 属性 绑定到从提供的基础数据上下文的 CanStart
属性 listviewItem.
我是个笨蛋。我刚刚尝试使用 AncestorType=ContextMenu
,它似乎很有魅力。仍然不完全确定为什么第一个解决方案适用于另一个问题。我想它与绑定到列表视图的数据模型有关。
我遇到了与 ContextMenu for ListViewItem only 非常相似的问题,但解决方案似乎对我的情况不起作用。
<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'
点击命令就像一个魅力,基本上我想做的是将菜单项的 IsEnabled 属性 绑定到从提供的基础数据上下文的 CanStart
属性 listviewItem.
我是个笨蛋。我刚刚尝试使用 AncestorType=ContextMenu
,它似乎很有魅力。仍然不完全确定为什么第一个解决方案适用于另一个问题。我想它与绑定到列表视图的数据模型有关。