在 listboxItem 中绑定按钮命令

Bind button command in listboxItem

我想绑定来自列表框项目的按钮命令。但是我的代码不起作用。你能帮帮我吗?

我的项目模板定义:

<UserControl.Resources>
    <DataTemplate x:Key="MemberList">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="20"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="25"/>
                <RowDefinition Height="25"/>
            </Grid.RowDefinitions>

            <Image Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Source="{DynamicResource appbar_user}" Height="30" Width="30" VerticalAlignment="Center" HorizontalAlignment="Left"/
            <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
            <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding EMail}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
            <Button Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" Width="25" Height="25" VerticalAlignment="Center" IsDefault="False" Content="X">
            </Button>
        </Grid>
    </DataTemplate>
</UserControl.Resources>

我的列表框声明:

<ListBox Margin="0,0,10,0" Grid.Column="0" Grid.Row="2" x:Name="_ownersList" ItemsSource="{Binding GroupOwners}" ItemTemplate="{DynamicResource MemberList}" >
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
                <EventSetter Event="Button.Click" Handler="Button_Click"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

感谢您的帮助。

对我来说效果很好

XAML:

 <Window.Resources>
        <DataTemplate x:Key="MemberList">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="20"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="25"/>
                    <RowDefinition Height="25"/>
                </Grid.RowDefinitions>

                <Image Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" Source="{DynamicResource appbar_user}" Height="30" Width="30" VerticalAlignment="Center" HorizontalAlignment="Left"/>
                <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
                <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding EMail}" VerticalAlignment="Center" HorizontalAlignment="Left"/>
                <Button Grid.Column="2" Command="{Binding DataContext.CloseButton,RelativeSource={RelativeSource AncestorType=Window, AncestorLevel=1}}" Grid.Row="0" Grid.RowSpan="2" Width="25" Height="25" VerticalAlignment="Center" IsDefault="False" Content="X">
                </Button>
            </Grid>
        </DataTemplate>
    </Window.Resources>
    <Grid Height="200" Width="200" VerticalAlignment="Center">
        <ListBox  Margin="0,0,10,0" Grid.Column="0" Grid.Row="2" x:Name="_ownersList" ItemsSource="{Binding GroupOwners}" ItemTemplate="{DynamicResource MemberList}" >
            <!--<ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <EventSetter Event="Button.Click" Handler="Button_Click"/>
                </Style>
            </ListBox.ItemContainerStyle>-->
        </ListBox>

    </Grid>

视图模型

private ICommand closeButton;       
public ICommand CloseButton
{
    get
    {
        if (this.closeButton == null)
        {
            this.closeButton = new RelayCommand<object>(this.ExecuteCloseButton);
        }

        return this.closeButton;
    }
}

private void ExecuteCloseButton(object err)
{

}