【问题标题】:Data Bound ListView - DataTemplate Delete Command and Command parameter数据绑定 ListView - DataTemplate 删除命令和命令参数
【发布时间】:2015-07-29 07:48:27
【问题描述】:

我正在使用 Xamarin.Forms,我正在寻找一种方法来使用自定义单元格的数据绑定 ListView,并且在这些自定义单元格中,有一个删除按钮绑定到我的 ViewModel 中的命令。

这是我的代码...

<ListView ItemsSource="{Binding SelectedServiceTypes}" IsVisible="{Binding ShowSelectedServiceTypes}" HeightRequest="110" RowHeight="30">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.View>
                    <StackLayout Orientation="Horizontal" HeightRequest="30">
                        <Label Text="{Binding ServiceCode}" HeightRequest="30" />
                        <Label Text="-" HeightRequest="30" />
                        <Label Text="{Binding ServiceDescription}" HeightRequest="30" />
                        <Button 
                            Text="Delete"
                            HeightRequest="30" 
                            HorizontalOptions="End" 
                            VerticalOptions="Start" 
                            Command="{Binding DeleteServiceTypeCommand}"
                            CommandParameter="{Binding ID}" />
                    </StackLayout>
                </ViewCell.View>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

ListView 绑定到 ObservableCollection。我希望删除按钮使用命令并将命令参数传递给我的视图模型。

    private Command _deleteServiceTypeCommand;
    public Command DeleteServiceTypeCommand
    {
        get 
        {
            if (_deleteServiceTypeCommand == null)
                _deleteServiceTypeCommand = new Command<string> ((serviceTypeID) => RemoveServiceType (serviceTypeID) );

            return _deleteServiceTypeCommand;
        }
    }

我不确定这在 Xamarin.Forms 中是否可行。这几乎就像单元格需要有两个 BindingContext,一个是集合中的元素(用于获取 ID 值),另一个是视图模型(用于使 Command 工作)。

有什么想法吗?

【问题讨论】:

  • 您可以让列表元素知道它们的父集合,然后将 Delete... 命令放在那里。那时不需要参数。只是 this.Parent.Remove(this) 的问题。否则,您将不得不使用 RelativeSource 绑定来恢复模型。

标签: c# listview mvvm xamarin.forms


【解决方案1】:

所以经过更多研究,我找到了 nuget 包 Xamarin.Forms.Behaviors,它添加​​了类似于 RelativeSource 绑定的内容。

https://github.com/corradocavalli/Xamarin.Forms.Behaviors

它的实现示例可以在这里找到。

http://codeworks.it/blog/?p=216

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2021-02-02
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多