C# WPF“;“静态”;列表中的绑定
我对列表中的绑定有问题 我有一个物品清单。此列表已绑定到列表框。对于列表中的每个对象,我都可以打开一个上下文菜单:C# WPF“;“静态”;列表中的绑定,c#,wpf,data-binding,binding,C#,Wpf,Data Binding,Binding,我对列表中的绑定有问题 我有一个物品清单。此列表已绑定到列表框。对于列表中的每个对象,我都可以打开一个上下文菜单: <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="ContextMenu"> <Setter.Value> <ContextMenu> <MenuI
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First" IsEnabled="{Binding FirstEnabled}"/>
<MenuItem Header="Second" IsEnabled="{Binding SecondEnable}"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
在这样的代码中,列表中的我的对象有两个布尔值要绑定。现在我想把这两个布尔值绑定到对象上。我想把它“静态”绑定到我的DataContext。这不是像这样工作,我不知道如何实现它
我在谷歌上搜索了很多,但没有发现任何有用的东西
谢谢你的帮助 您可以使用ElementName语法引用每个datacontext:
<ListBox x:Name="myListBox">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First" IsEnabled="{Binding Path=DataContext.FirstEnabled, ElementName=myListBox}"/>
<MenuItem Header="Second" IsEnabled="{Binding Path=DataContext.SecondEnable, ElementName=myListBox}"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
使用此语法,您可以使用ListBox的DataContext,而不是ListItem。因为,
ContextMenu
应用于ListBoxItem
它将有其DataContext
值,ListBoxItem
将成为其PlacementTarget
。因此,如果您想绑定到ListBox.DataContext
的属性,您需要将当前的ListBox.DataContext
作为,例如,Tag
传递到ListBoxItem
,然后您需要从ContextMenu
通过其PlacementTarget
引用它。这一切都是因为ContextMenu
使用了Popup
,这是如此简单的RelativeSource
/ElementName
绑定无法工作
<Style TargetType="ListBoxItem">
<Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, Path=DataContext}"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="First" IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.Tag.FirstEnabled}"/>
<MenuItem Header="Second" IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.Tag.SecondEnable}"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
回答得很好。工作!非常感谢你。