3

DataTemplateに関連付けられたコンテキストメニューでCommandParameter属性を使用したい。commandParameterには、以下のコードサンプルに示すように、データテンプレートをトリガーしたオブジェクトへの参照が含まれている必要があります。「{BindingPath=this}」を使おうとしましたが、「this」はプロパティではないため、機能しません。コマンドは起動しますが、正しいパラメーターを取得できません。誰かがこれを行う方法についてアイデアを持っていますか?

注:コマンド= "{Binding DeleteSelectedMeetingCommand}"をビューロケーターへの参照に置き換えて削除したところ、コマンドがトリガーされていました。

       <DataTemplate DataType="{x:Type Models:MeetingDbEntry}">

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0"  Text="{Binding Path=HostTeam}"/>
            <TextBlock Grid.Column="1" Text="{Binding Path=GuestTeam}"/>
            <TextBlock Grid.Column="2" Text="{Binding Path=Result}"/>
            <Grid.ContextMenu>
                <ContextMenu Name="MeetingMenu">
                    <MenuItem Header="Delete"  
                              Command="{Binding 
                                            Source={StaticResource Locator}, 
                                            Path=Main.DeleteSelectedMeetingCommand}"
                              CommandParameter="{Binding Path=this}"/>
                </ContextMenu>
            </Grid.ContextMenu>
        </Grid>
    </DataTemplate>

ありがとう、

4

2 に答える 2

3

以下のコードで動作しています。DataTemplateをトリガーしたプロパティを参照するには、CommandParameter属性に{Binding}と入力する必要があります。

 <DataTemplate DataType="{x:Type Models:MeetingDbEntry}">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="100"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0"  Text="{Binding Path=HostTeam}"/>
            <TextBlock Grid.Column="1" Text="{Binding Path=GuestTeam}"/>
            <TextBlock Grid.Column="2" Text="{Binding Path=Result}"/>
            <Grid.ContextMenu>
                <ContextMenu Name="MeetingMenu">
                    <MenuItem Header="Delete"  
                              Command="{Binding 
                                      Source={StaticResource Locator}, 
                                      Path=Main.DeleteSelectedMeetingCommand}"
                              CommandParameter="{Binding}"
                              />

                </ContextMenu>
            </Grid.ContextMenu>
        </Grid>
    </DataTemplate>
于 2010-07-15T11:25:10.587 に答える
0

削除するオブジェクトにDeleteSelectedMeetingCommandを公開し、コンテキストメニューエントリをそれにバインドします。次に、削除するオブジェクトを保持しているメンバー変数をコマンドに追加し、コマンドをthis保持している削除するオブジェクトで初期化します。

例:

public class DeletableObject
{
    public ICommand DeleteCommand { get; }

    public DeleteableObject()
    {
        DeleteCommand = new DeleteCommand(this);
    }
}

public class DeleteCommand : ICommand
{
    private DeletableObject _DeletableObject;

    public DeleteCommand(DeletableObject deletableObject)
    {
        _DeletableObject = deletableObject;
    }

    // skipped the implementation of ICommand but it deletes _DeletableObject
}

お役に立てば幸いです。

于 2010-07-15T10:53:41.690 に答える