将 WPF 按钮 CommandParameter 绑定到 DataTemplate 中的按钮本身

Posted

技术标签:

【中文标题】将 WPF 按钮 CommandParameter 绑定到 DataTemplate 中的按钮本身【英文标题】:Binding a WPF Button CommandParameter to the Button itself in DataTemplate 【发布时间】:2012-09-06 23:55:31 【问题描述】:

我有一个代表 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。这可能吗?

【问题讨论】:

可能更容易处理 Button 的 Click 事件。您在处理程序中收到的第一个参数将是 Button。 【参考方案1】:
<Button Command="Binding Command" 
        CommandParameter="Binding RelativeSource=RelativeSource Self" />

您的 Command 属性应该是 RelayCommand 的通用版本:例如 RelayCommand&lt;object&gt;

【讨论】:

【参考方案2】:

像 Miklós Balogh 所说的那样回答,或者你可以:

<Button x:Name="MyButton" Command="Binding Command" CommandParameter=Binding ElementName=MyButton ... /> 

【讨论】:

【参考方案3】:

我遇到了同样的问题,但我在不同的环境中使用它:

<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 以更好地理解它。

【讨论】:

以上是关于将 WPF 按钮 CommandParameter 绑定到 DataTemplate 中的按钮本身的主要内容,如果未能解决你的问题,请参考以下文章

WPF CommandParameter 绑定未更新

wpf usercontrol,将按钮的命令参数绑定到父用户控件

WPF CommandParameter 在第一次调用 CanExecute 时为 NULL

代码中无法识别 WPF CommandParameter

WPF CommandParameter 在上下文菜单中设置时未更新

理解WPF Binding CommandParameter =“{Binding}”