#xamarin #xamarin.forms
#xamarin #xamarin.forms
Вопрос:
Как я могу удалить ListView формы элемента в кроссплатформенных формах Xamarin
<ViewCell.ContextActions>
<MenuItem Text="Delete" IsDestructive="True" Command="Binding DleteItemCommand}" />
</ViewCell.ContextActions>
Но я хочу, чтобы пользовательский код соответствовал шаблону MVVM.
Ответ №1:
Итак, модель представления предназначена только для уровня представления, вам нужно взаимодействовать с вашей ячейкой вместо viewmodel. Выполните следующие действия:
1. Создайте наблюдаемую коллекцию ViewModels для ячеек. 2. Добавьте эту коллекцию в ItemSource ListView. 3. Затем для команды добавьте метод обратного вызова
<ListView x:Name="citiesListView" ItemTapped="OnSelection">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<ViewCell.ContextActions>
<MenuItem Clicked="DeleteAction" Text="Delete" IsDestructive="true" CommandParameter="{Binding .}" />
</ViewCell.ContextActions>
<StackLayout Padding="15,0">
<Label
Text="{Binding .}"
FontSize="30"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
Затем в коде:
public partial class YourPage : ContentPage
{
public ObservableCollection<string> YourCollection { get; set; }
public YourPage()
{
InitializeComponent();
// initialize at this point
YourCollection = new ObservaleCollection(<Some collection of view models>);
citiesListView.ItemsSource = YourCollection;
}
private void DeleteAction(object sender, System.EventArgs e)
{
var menuItem = ((MenuItem)sender);
var yourViewModel = (YourViewModelType) menuItem.CommandParameter;
YourCollection.Remove(yourViewModel);
}
Ответ №2:
Вы можете добавить ObservableCollection<YourType>
и удалить элемент из коллекции в командной строке.
var collection = new ObservableCollection<YourType>();
yourList.ItemSource = collection;
// in Command
public void OnDelete (object sender, EventArgs e)
{
// getting reference on menu item
var menuItem = ((MenuItem)sender).CommandParameter;
// cast to underlying viewModel
var yourObject = (YourType)menuItem;
collection.Remove(yourObject);
}
Комментарии:
1. Это совместимо с шаблоном MVVM?
Ответ №3:
Да, он совместим с шаблоном MVVM. Итак, у вас есть ячейка в ListView, и это единственное представление ViewModel. И, используя этот подход, у вас есть следующие отношения: «модель — ViewModel — view». В ObservableCollection есть ссылки на ViewModels, которые отображаются в ячейках ListView, и теперь вы можете легко удалять нужные ячейки. Смотрите улучшения выше в коде
Комментарии:
1. Спасибо за ваш ответ. Но как использовать это в представлении модели в Command?