2013-02-17 2 views
2

Я пытаюсь реализовать функциональность LongClick на виде и прочитать следующую, при условии некоторой информации mvvmcross touch command binding in androidmvvmcross пользовательских привязки к EventHandler

Искал безуспешно IMvxCommand в коде так предположить, что это может быть устаревшим? Поэтому я приложил все усилия, но не могу получить никаких функций LongClick - возможно, из-за ограниченного знания C# и обработчиков событий. Я реализовал следующее, но не был уверен в использовании MvxRelayCommand.

public class LongClickEventBinding: MvxBaseAndroidTargetBinding 
{ 
private readonly View _view; 
private MvxRelayCommand<JobJob> _command; 

public LongClickEventBinding(View view) 
{ 
    _view = view; 
    _view.LongClick += ViewOnLongClick; 
} 

private void ViewOnLongClick(object sender, View.LongClickEventArgs eventArgs) 
{ 
    if (_command != null) 
    { 
     _command.Execute(); 
    } 
} 

public override void SetValue(object value) 
{ 
    _command = (MvxRelayCommand<JobJob>)value; 
} 

protected override void Dispose(bool isDisposing) 
{ 
    if (isDisposing) 
    { 
     _view.LongClick -= ViewOnLongClick; 
    } 
    base.Dispose(isDisposing); 
} 

public override Type TargetType 
{ 
    get { return typeof(MvxRelayCommand<JobJob>); } 
} 

public override MvxBindingMode DefaultMode 
{ 
    get { return MvxBindingMode.OneWay; } 
} 
} 

И

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry) 
    { 
    base.FillTargetFactories(registry); 
    registry.RegisterFactory(new MvxCustomBindingFactory<View>("LongClick", view => new LongClickEventBinding(view))); 
    } 

И

public ICommand JobSelectedCommand 
    { 
    get { return new MvxRelayCommand<JobJob>(NavigateToJobTasks); } 
    } 

    public void NavigateToJobTasks(JobJob jobJob) 
    { 
     RequestNavigate<JobTaskListViewModel>(new { key = jobJob.JobID }); 
    } 

И

<Mvx.MvxBindableListView 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
local:MvxBind="{'ItemsSource':{'Path':'GroupedList'},'LongClick':{'Path':'JobSelectedCommand'}}"  
local:MvxItemTemplate="@layout/listitem_job_old"/> 

Однако, когда я запускаю код на эмуляторе и LongClick кнопкой мыши на ListItem много не бывает. ли следующие должны быть осуществлены в представлении

public event EventHandler<View.LongClickEventArgs> LongClick; 

Любая помощь/указатели оценили.

ответ

1

Для списков, vNext MvxBindableListView поддерживает ItemLongClick некоторое время в любом случае - см

https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Binding.Droid/Views/MvxBindableListView.cs#L77

Обратите внимание, что это связывание крючки в ItemLongClick в ListView, а не в LongClick

Используя это в axml, вы должны уметь:

<Mvx.MvxBindableListView 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
local:MvxBind="{'ItemsSource':{'Path':'GroupedList'},'ItemLongClick':{'Path':'JobSelectedCommand'}}"  
local:MvxItemTemplate="@layout/listitem_job_old"/> 

Если это не сработает, отчет ug о проблемах Github.


Если вы хотите сделать ваш заказ обязательным родового (не список) View, то ваш код будет необходимо переключиться на ICommand вместо IMvxCommand, и вы также не могли пройти в Пункт аргумент - поэтому вам нужно просто использовать MvxRelayCommand в ViewModel.

Я добавил поддержку LongClick Просмотр уровня к списку вопросов - https://github.com/slodge/MvvmCross/issues/165

Но для ListView это, вероятно, ItemLongClick вы на самом деле заинтересованы в

+0

Работа по назначению. Благодарю. – Kern

Смежные вопросы