将WPF Button CommandParameter绑定到DataTemplate中的Button本身

时间:2012-09-13 20:06:04

标签: c# wpf binding datatemplate commandparameter

我有一个表示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本身。这样我就可以设置Call​​isto弹出窗口的PlacementTarget。这可能吗?

3 个答案:

答案 0 :(得分:31)

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

例如,您的Command属性应该是RelayCommandRelayCommand<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 以更好地理解它。