【发布时间】: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