2013-06-06 24 views
7

Có khả năng như vậy để ràng buộc các nút hành động trực tiếp như thế này:MvvmCross: GestureRecognized ràng buộc để ViewModel hành động

var set = this.CreateBindingSet<... 
set.Bind(button).To(x => x.Go); 

nhưng những gì về UITapGestureRecognizer, ví dụ. Làm thế nào tôi nên ràng buộc nó (đó là hành động tap) theo cách thanh lịch như vậy?

Cảm ơn bạn!

Trả lời

15

Bạn có thể tự thêm nếu bạn muốn.

ví dụ: một cái gì đó giống như

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); 

Tôi nghĩ điều đó sẽ hiệu quả - nhưng đây là mã hóa trực tiếp tại đây!


Nâng cao> Nếu bạn muốn, bạn cũng có thể loại bỏ sự cần thiết của phần For(tap => tap.Command) bằng cách đăng ký một tài sản gắn mặc định cho TapBehaviour - để làm ghi đè này Setup.FillBindingNames và sử dụng:

registry.AddOrOverwrite(typeof (TapBehaviour), "Command"); 

Sau này , sau đó các ràng buộc có thể là:

set.Bind(label.Tap()).To(x => x.Go); 

+0

Cảm ơn bạn rất nhiều! Mặc dù có những màn sương nhỏ, mọi thứ hoạt động như một sự quyến rũ! – Agat

+0

Vui lòng chỉnh sửa câu trả lời để sửa lỗi. Cảm ơn. – Stuart

+0

Đã cập nhật. Đó là một mẹo để thay đổi chỉ 4 ký tự (do hạn chế stackoverflow) mặc dù. anh ta – Agat

13

Just for refe rence. phiên bản mới hơn của MvvMcross bao gồm một phần mở rộng phương pháp UIView (xem MvxTapGestureRecognizerBehaviour) ra khỏi hộp mà bạn có thể sử dụng để ràng buộc các cử chỉ tap:

using Cirrious.MvvmCross.Binding.Touch.Views.Gestures; 

// in this case "Photo" is an MvxImageView 
set.Bind(Photo.Tap()).For(tap => tap.Command).To("OpenImage"); 
+1

Cảm ơn bạn đã tham khảo. Tôi đã thêm trình nhận dạng cử chỉ để vuốt: https://github.com/MvvmCross/MvvmCross/pull/1266 – SimonSimCity

+0

Đây là các bộ sưu tập. Không chắc chắn cách tôi không biết về các tiện ích mở rộng này. Đã lưu cho tôi rất nhiều công việc liên kết với một lần nhấn trên UIStackview. – NovaJoe

Các vấn đề liên quan