数据绑定ListView - DataTemplate删除命令和命令参数

时间:2015-05-17 21:47:05

标签: c# listview mvvm xamarin.forms

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

这是我的代码......

<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。我希望删除按钮使用Command并将CommandParameter传递给我的View Model。

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

            return _deleteServiceTypeCommand;
        }
    }

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过更多的研究,我能够找到nuget包Xamarin.Forms.Behaviors,它增加了类似于RelativeSource绑定的东西。

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

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

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