2013-02-17 96 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

相关问题