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

15

我有一个DataTemplate,它表示通过自定义AppBarCommand对象集合声明的AppBar按钮。

  public AppBarCommand(RelayCommand command, string buttonstyle)
  {
     Command = command;
     ButtonStyle = buttonstyle;
  }

<DataTemplate>
   <Button Command="{Binding Command}"
           Style="{Binding ButtonStyle, Converter={StaticResource StringNameToStyleConverter}}"/>
</DataTemplate>

我想添加一个CommandParameter绑定,但参数必须是按钮本身。这样我就可以设置Callisto飞出菜单的PlacementTarget。这是否可能?


可能更容易处理按钮的单击事件。您在处理程序中收到的第一个参数将是按钮。 - Jay
3个回答

50
<Button Command="{Binding Command}" 
        CommandParameter="{Binding RelativeSource={RelativeSource Self}}" />

您的 Command 属性应该是 RelayCommand 的通用版本:例如 RelayCommand<object>


6

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

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

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}" />

它应该可以工作。

我还建议阅读这篇文章以更好地理解它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接