MvvmCross:GestureRecognized 绑定到 ViewModel 动作
Posted
技术标签:
【中文标题】MvvmCross:GestureRecognized 绑定到 ViewModel 动作【英文标题】:MvvmCross: GestureRecognized binding to ViewModel action 【发布时间】:2013-06-06 11:30:46 【问题描述】:可以像这样直接绑定按钮动作:
var set = this.CreateBindingSet<...
set.Bind(button).To(x => x.Go);
但是,例如,UITapGestureRecognizer 是什么。我应该如何以如此优雅的方式绑定它(它是点击动作)?
谢谢!
【问题讨论】:
【参考方案1】:仅供参考。较新版本的 MvvMcross 包含一个开箱即用的 UIView 方法扩展(请参阅 MvxTapGestureRecognizerBehaviour),您可以使用它来绑定点击手势:
using Cirrious.MvvmCross.Binding.Touch.Views.Gestures;
// in this case "Photo" is an MvxImageView
set.Bind(Photo.Tap()).For(tap => tap.Command).To("OpenImage");
【讨论】:
感谢您的参考。我为滑动添加了一个手势识别器:github.com/MvvmCross/MvvmCross/pull/1266 这是惊人的球。不知道我怎么不知道这些扩展。为我节省了很多绑定到 UIStackview 上的工作。【参考方案2】:如果你愿意,你可以自己添加。
例如像
public class TapBehaviour
public ICommand Command get;set;
public TapBehaviour(UIView view)
var tap = new UITapGestureRecognizer(() =>
var command = Command;
if (command != null)
command.Execute(null);
);
view.AddGestureRecognizer(tap);
public static class BehaviourExtensions
public static TapBehaviour Tap(this UIView view)
return new TapBehaviour(view);
// binding
set.Bind(label.Tap()).For(tap => tap.Command).To(x => x.Go);
我认为这会起作用 - 但这是在这里实时编码!
高级>如果您愿意,您还可以通过为 TapBehaviour 注册一个默认绑定属性来消除对 For(tap => tap.Command)
部分的需求 - 这样做覆盖 Setup.FillBindingNames
并使用:
registry.AddOrOverwrite(typeof (TapBehaviour), "Command");
在此之后,绑定可以是:
set.Bind(label.Tap()).To(x => x.Go);
【讨论】:
非常感谢!尽管有微小的错误输入,但一切都像魅力一样! 已更新。不过,仅更改 4 个字符(由于 *** 限制)是一个技巧。他他 我在 TapBehaviour.Command 的设置器中得到 null 作为值 - 为什么会这样?以上是关于MvvmCross:GestureRecognized 绑定到 ViewModel 动作的主要内容,如果未能解决你的问题,请参考以下文章
MvvmCross.Forms 5.4:如何设置 UWP 项目?