15

カスタムAppBarCommandオブジェクトのコレクションを介して宣言するAppBarボタンを表すDataTemplateがあります。

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

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

CommandParameterバインディングを追加したいのですが、パラメーターはボタン自体である必要があります。これは、カリストフライアウトの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ósBaloghが言ったように答えてください、またはあなたはそうすることができます:

<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 に答える