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

标签 listview xamarin mvvm xamarin.forms command

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

 <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>

然后我在 ViewModel 中得到 DeleteVolumeCommand:
 private ICommand _deleteVolumeCommand;
    public ICommand DeleteVolumeCommand
    {
        get
        {
            {
                if (_deleteVolumeCommand == null)
                {
                    _deleteVolumeCommand = new Command((e) =>
                    {
                        var item = (e as Volume);
                        int index = MissingVolumeListView.Items.IndexOf(item);                       
                    });
                }

                return _deleteVolumeCommand;
            }

        }
    }

如您所见,我想要的是在单击 ListView 中的按钮时获得选定的项目。然后,我想让我的 ListView 获取所选项目的索引以从我的 ListView 中删除它

感谢您的帮助

最佳答案

首先更改您的删除按钮 XAML。

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

该命令需要通过 ListView 名称将其绑定(bind)上下文更改为 View 模型。

然而,命令参数可以只传递作为 ListView 项的当前绑定(bind)。

在您的 View 模型中,您不能通过名称引用任何控件。而是使用 ListView 将其 ItemsSource 绑定(bind)到的列表 - Volumes。

您可以直接删除该项目。
_deleteVolumeCommand = new Command((e) =>
{
    var item = (e as Volume);
    Volumes.Remove(item);                       
});

如果 Volumes 不是 ObservableCollection,请记住还要调用 notify 属性已更改。

关于listview - 从按钮命令 xamarin.forms MVVM 获取 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47889370/

相关文章:

c# - 控制键的 ListView KeyUp 错误

c# - 在 WPF ListView 中以编程方式选择项目

c# - ListView 子项字体不起作用

wpf - 将 ViewModel 属性绑定(bind)到静态资源的属性

c# - 从头开始构建我自己的 mvvm 项目?

用于大型数据集的 Android ListView

xamarin - 无法加载从 Cirrious.MvvmCross.dll 引用的 MvvmCross 程序集 : System

xamarin - ItemsSource 可绑定(bind)属性

xamarin - AppCenter 不构建 Android App Bundle (aab)

c# - 如何验证 UserControl 的依赖属性?