2

私はビューにLongClick機能を実装しようとしていますが、Androidでいくつかの情報 mvvmcrosstouchコマンドバインディングを提供する以下を読んでいます

コード内で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"/>

ただし、エミュレータでコードを実行し、listitemでマウスボタンをLongClickすると、あまり発生しません。ビューに以下を実装する必要がありますか?

public event EventHandler<View.LongClickEventArgs> LongClick;

ヘルプ/ポインタをいただければ幸いです。

4

1 に答える 1

1

リストについては、vNextMvxBindableListViewはとにかくしばらくの間ItemLongClickをサポートしてきました-を参照してください

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

このバインディングは、LongClickではなくListViewのItemLongClickにフックすることに注意してください。

これを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"/>

これが機能しない場合は、Githubの問題に関するバグレポートを作成してください。


汎用(非リスト)ビューでカスタムバインディングを実行する場合は、コードをIMvxCommandではなくICommandに切り替える必要があります。また、Item引数を実際に渡すこともできません。したがって、次のようにする必要があります。 ViewModelでMvxRelayCommandを使用します。

ビューレベルのLongClickサポートを問題リストに追加しました-https ://github.com/slodge/MvvmCross/issues/165

しかし、ListViewの場合、実際に関心があるのはおそらくItemLongClickです。

于 2013-02-18T05:53:38.217 に答える