Каждый из двух ваших представлений имеет свой собственный BindingContext.Представление, которое содержит ListView, имеет BindingContext типа BasketEquipamentPartViewModel
, поэтому {Binding ItensOrder}
выбирает правильную коллекцию для ItemsSource.
Тогда Xamarin будет использовать BasketEquipamentPartCell несколько раз, по одному для каждого элементаколлекция, устанавливающая BindingContext для каждого OrderItem.Таким образом, BasketEquipamentPartCell не может напрямую ссылаться на BindingContext коллекции.При оценке Command="{Binding BindingContext.removeItemOder}"
на кнопке Xamarin.Forms просматривает свойства OrderItem для removeItemOder, но не находит его.Когда Xamarin.Forms не может найти свойство, оно молча игнорирует его, поэтому остальная часть вашего приложения работает.
Чтобы исправить это, вам нужно определить свойство Command для OrderItem, к которому можно привязать.
Эскиз реализации
Один из подходов к этому - добавить метод в BasketEquipamentPartViewModel, который прослушивает запросы на удаление элементов с использованием MessagingCenter (который выуже используется для других целей):
public void CreateMessaging()
{
MessagingCenter.Subscribe<OrderItem>(this, "RemoveOrderItem", RemoveItem);
// the rest of CreateMessaging you already have
}
private void RemoveItem(OrderItem itemToRemove)
{
// do the stuff you're already doing in removeItemOder
}
Обратите внимание, что не похоже, что вы выполняете какую-либо асинхронную работу в removeItemOder, поэтому вы должны удалить асинхронную работу и вернуть ее void.
Затем в классе OrderItem создайте команду, например:
private ICommand _removeItemOrder;
public ICommand removeItemOder => _removeItemOrder ??
(_removeItemOrder = new Command<OrderItem>(item => MessagingCenter.Send(this, "RemoveOrderItem"));
Тогда {Binding BindingContext.removeItemOder} (или просто {Binding removeItemOder} - здесь BindingContext избыточен) успешно найдет команду для вызова.