arc*_*aut 19 wpf command datatemplate
我有一个上下文菜单.它绑定到一些集合,它有一个定义的ItemTemplate,如下所示:
<ContextMenu
ItemsSource={Binding ...}
ItemTemplate={StaticResource itemTemplate}
/>
Run Code Online (Sandbox Code Playgroud)
itemTemplate是一个带TextBlock的简单DataTemplate:
<DataTemplate x:Key="itemTemplate">
<TextBlock Text={Binding ...} />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如何将MenuItem的Command属性绑定到底层对象的属性?
Mar*_*ris 24
我认为你需要将TextBlock包装在MenuItem中:
<DataTemplate x:Key="itemTemplate">
<MenuItem Command={Binding ...}>
<TextBlock Text={Binding ...} />
</MenuItem>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
但是我现在没有在我面前试用这个IDE.让我知道事情的后续.
看起来你需要使用ItemContainerStyle所看到这里.很抱歉在开始的时候引导你走错了路 - 但是我在IDE前面这是有效的:
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding ...}"/>
</Style>
</ContextMenu.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)
虽然这只是Martin Harris回答的一个细微变化,但我还是认为我会分享它.我发现为整个集合指定一个命令更有用,并且还发送一个CommandParameter:
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{x:Static v:ViewModel.CommandForAll}"/>
<Setter Property="CommandParameter" Value="{Binding ValueForCommand}"/>
</Style>
</MenuItem.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)
然后,您可以确定在命令的处理程序中执行的操作:
private void CommandForAll_Executed(object sender, ExecutedRoutedEventArgs e)
{
var cmdParam = e.Paramater as ExpectedType
if (cmdParam != null)
//DoStuff...
}
Run Code Online (Sandbox Code Playgroud)