2013-02-17 109 views
2

我試圖在視圖上實現LongClick功能和閱讀其中提供了一些信息 mvvmcross touch command binding in androidmvvmcross自定義綁定到事件處理程序

不成功搜索: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鼠標按鈕運行的代碼沒有太大的反應。 執行以下操作需要在View

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

注意,此綁定掛鉤插入ListView的ItemLongClick而不是進入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"/> 

如果這不起作用,然後請火ab ug報告Github問題。


如果你想做一個普通(非列表)查看您的自定義綁定,那麼您的代碼將需要切換到ICommand的,而不是IMvxCommand,你也不能真正通過在項目論證 - 所以你只需要在ViewModel上使用MvxRelayCommand。

我已經加入到問題清單查看級LongClick支持 - https://github.com/slodge/MvvmCross/issues/165

但對於一個ListView它可能是ItemLongClick你實際上是有意

+0

工作的指示。謝謝。 – Kern 2013-02-18 20:45:56

相關問題