从按钮命令xamarin.forms MVVM获取ListView

从按钮命令xamarin.forms MVVM获取ListView,listview,xamarin,mvvm,xamarin.forms,command,Listview,Xamarin,Mvvm,Xamarin.forms,Command,在使用MVVM模式的xamarin.forms应用程序中,我的ListView有一个问题。我希望你能帮助我。 这是我的xaml: <ListView x:Name="MissingVolumeListView" ItemsSource="{Binding Volumes}" SelectedItem ="{Binding Id}"

在使用MVVM模式的xamarin.forms应用程序中,我的ListView有一个问题。我希望你能帮助我。 这是我的xaml:

 <ListView x:Name="MissingVolumeListView"  
                          ItemsSource="{Binding Volumes}"
                          SelectedItem ="{Binding Id}"
                             >
                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <ViewCell>
                                        <Grid x:Name="Item">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="40"/>
                                            </Grid.ColumnDefinitions>
                                            <Label  Text="{Binding Name}" Style="{StaticResource UsualLabelTemplate}"/>
                                            <Button Grid.Column="1" x:Name="DeleteButton" Text ="-" BindingContext="{Binding Source={x:Reference MissingVolumeListView}, Path=BindingContext}"   Command="{Binding DeleteVolumeCommand}" CommandParameter="{Binding Source={x:Reference Item}, Path=BindingContext}"/>
                                        </Grid>
                                    </ViewCell>
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>
如您所见,我想要的是在单击ListView中的按钮时获得选中的项。然后,我想让我的ListView获取所选项目的索引,以便将其从我的ListView中删除


感谢您的帮助

首先更改您的删除按钮XAML

<Button Grid.Column="1" 
        Text ="-" 
        Command="{Binding Path=BindingContext.DeleteVolumeCommand, Source={x:Reference MissingVolumeListView}}" 
        CommandParameter="{Binding .}" /> 

如果卷不是ObservableCollection,请记住也调用notify属性changed。

x:Name的用法不是MVVM模式,请尝试避开此问题。“删除”命令位于listitems的viewmodels上,对吗?使用viewmodels创建列表时,将列表作为对viewmodel的引用传递。然后可以在items viewmodel中轻松删除它。
<Button Grid.Column="1" 
        Text ="-" 
        Command="{Binding Path=BindingContext.DeleteVolumeCommand, Source={x:Reference MissingVolumeListView}}" 
        CommandParameter="{Binding .}" /> 
_deleteVolumeCommand = new Command((e) =>
{
    var item = (e as Volume);
    Volumes.Remove(item);                       
});