我有一个表示AppBar按钮的DataTemplate,我通过一组自定义AppBarCommand对象声明这些按钮。
public AppBarCommand(RelayCommand command, string buttonstyle)
{
Command = command;
ButtonStyle = buttonstyle;
}
<DataTemplate>
<Button Command="{Binding Command}"
Style="{Binding ButtonStyle, Converter={StaticResource StringNameToStyleConverter}}"/>
</DataTemplate>
我想添加一个CommandParameter绑定,但参数必须是Button本身。这样我就可以设置Callisto弹出窗口的PlacementTarget。这可能吗?
答案 0 :(得分:31)
<Button Command="{Binding Command}"
CommandParameter="{Binding RelativeSource={RelativeSource Self}}" />
例如,您的Command属性应该是RelayCommand
:RelayCommand<object>
的通用版本。
答案 1 :(得分:4)
像MiklósBalogh所说的答案,或者你可以:
<Button x:Name="MyButton" Command="{Binding Command}" CommandParameter={Binding ElementName=MyButton ... />
答案 2 :(得分:0)
我遇到了同样的问题,但我在稍微不同的上下文中使用了它:
<MenuItem ItemsSource="{Binding MyList}">
<MenuItem.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding RelativeSource={ RelativeSource FindAncestor, AncestorType={ x:Type Window}}, Path= DataContext.MyListItemCommand}"/>
<Setter Property="CommandParameter" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
所以我假设即使你这样写
<Button Command="{Binding Command}" CommandParameter="{Binding}" />
它应该可以工作。
我还建议您阅读 this post 以更好地理解它。