带有ContextMenu项的ListBoxItem到Command

时间:2013-05-14 09:37:12

标签: binding contextmenu windows-phone mvvmcross

我正在使用Microsoft.Phone.Controls.Toolkit中的ContextMenu:

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

想要通过DeleteCommand删除ListBoxItem

<ListBox ItemsSource="{Binding Items}">

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        </Style>
    </ListBox.ItemContainerStyle>

    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu >
                        <toolkit:MenuItem Header="Delete" Command="{Binding DeleteCommand}" CommandParameter="????"/>
                    </toolkit:ContextMenu>
                </toolkit:ContextMenuService.ContextMenu>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Name}" HorizontalAlignment="Left" VerticalAlignment="Center" TextWrapping="Wrap"/>
                <toolkit:ToggleSwitch  Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

的DeleteCommand:

public ICommand DeleteCommand
{
    get
    {
        return new MvxCommand<BulbItem>(item =>
        {
            _collectionService.Delete(item);
            Close(this);
        });
    }
}

如何将绑定到BulbItems列表的ListBoxItem传递给DeleteCommand?

提前致谢!

2 个答案:

答案 0 :(得分:1)

我认为您可能只能将????替换为{Binding} - 在这种情况下,Path是对DataContext中对象的隐式绑定本身


除此之外,您还需要将DeleteCommand绑定路由到父对象的DataContext - 我认为您可以使用某种ElementNameRelativeSource绑定来实现这一点 - 但是我不是这方面的专家。

一般来说,我所做的就是将我的命令放在我的列表项对象中 - 例如请参阅MVVMCross changing ViewModel within a MvxBindableListView

中的部分答案

答案 1 :(得分:0)

为什么不将操作设置为在Click eventTap event上执行? 像这样:

<toolkit:MenuItem Header="Delete"  Click="deleteMenu_Click"/>

<toolkit:MenuItem Header="Delete"  Tap="deleteMenu_Tap"/>

在后面的代码中添加删除列表项代码。