У меня проблемы с получением привязки к работе для SwipeItem
в пределах RadListView
(что аналогично стандартному ListView
).В частности, я пытаюсь привязать к свойству Command
;Тем не менее, я попытался привязать к другим свойствам, например, Text
, но безрезультатно.
<telerikDataControls:RadListView ItemsSource ="{Binding Users, Mode=OneWay}">
<telerikDataControls:RadListView.ItemTemplate>
<DataTemplate>
<SwipeControl>
<SwipeControl.RightItems>
<SwipeItems>
<SwipeItem Text="Delete"
Background="Red"
Foreground="White"
Command="{Binding DeleteCommand}">
<SwipeItem.IconSource>
<SymbolIconSource Symbol="Delete"/>
</SwipeItem.IconSource>
</SwipeItem>
</SwipeItems>
</SwipeControl.RightItems>
<Grid>
<TextBlock Text="{Binding Name"/>
</Grid>
</SwipeControl>
</DataTemplate>
</telerikDataControls:RadListView.ItemTemplate>
</telerikDataControls:RadListView>
Users
установлено в конструкторе ViewModel для View;это ObservableCollection
из UserViewModel
, каждое из которых имеет свойства, которые я пытаюсь использовать (с событиями PropertyChanged).
Привязка Name
работает в Grid
далее в шаблонеи я проверил DataContext
из SwipeControl
, и это UserViewModel
.В моем тестировании я настроил Event
на SwipeItem
:
<SwipeItem Text="Delete"
Background="Red"
Foreground="White"
Command="{Binding DeleteCommand}"
Invoked="SwipeItem_Invoked">
и обработал его в коде:
private void SwipeItem_Invoked(SwipeItem sender, SwipeItemInvokedEventArgs args)
{
UserViewModel userToDelete = (UserViewModel)args.SwipeControl.DataContext;
}
Здесь я вижу, чтоsender.Command
- это null
.
Очевидно, что быстрое решение заключается в использовании шаблона события;Тем не менее, я пытаюсь сохранить его в MVVM и максимально избегать выделения кода.У меня никогда не было проблем с привязкой к свойствам, поэтому представьте, что я делаю что-то в корне неправильно.
Спасибо.
Редактировать:
public class UserViewModel : MvxNotifyPropertyChanged // MvvmCross
{
public IMvxAsyncCommand DeleteCommand { get; }
private string _name;
public string Name // this property is bound in the Grid but will not bind in the SwipeItem
{
get => _name;
set => SetProperty(ref _name, value);
}
}