gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:20:09 35 4
gpt4 key购买 nike

我在使用 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com