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 绑定,但参数必须是 Button 本身。这样我就可以设置 Callisto 浮出控件的 PlacementTarget。这可能吗?

4

3 回答 3

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

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

于 2012-09-13T20:12:27.553 回答
4

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

<Button x:Name="MyButton" Command="{Binding Command}" CommandParameter={Binding ElementName=MyButton ... /> 
于 2012-09-13T20:14:34.373 回答
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}" />

它应该工作。

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

于 2021-01-11T14:51:59.813 回答