2013-06-27 63 views
7

Tôi đang cố gắng liên kết với thuộc tính văn bản của TitleLabel trên UIButton bằng MvvmCross cho Xamarin.iOS. Dưới đây là những gì tôi có cho đến nay ...MvvmCross Liên kết với UIButton.TitleLabel.Text

set.Bind(btnFoo).For(btn => btn.TitleLabel.Text).To(vm => vm.BtnFooText); 

Tôi cũng đã cố gắng ...

set.Bind(btnFoo.TitleLabel).For(lbl => lbl.Text).To(vm => vm.BtnFooText); 

Cả trong số đó dường như làm việc. Tôi đánh giá cao sự giúp đỡ!

+0

Bản sao có thể có của [Tiêu đề liên quan đến thông thạo và tiêu đề UIButton] (h ttps: //stackoverflow.com/questions/16751013/fluent-bindings-and-uibutton-titles) –

Trả lời

8

Đối với các vấn đề gỡ lỗi, cho phép dấu vết có thể giúp - xem MvvmCross Mvx.Trace usage

Đối với ràng buộc một tài sản trên một pre-existing subcontrol cố định của một subcontrol sau đó phương pháp này nên làm việc:

set.Bind(sub.subSub).For(c => c.PropertyName).To(vm => vm.Foo); 

Tuy nhiên, won mà không tiếp tục làm việc nếu điều khiển phụ sau đó thay đổi điều khiển phụ của nó tại bất kỳ điểm nào. Đối với những trường hợp, nhìn vào các ràng buộc tùy chỉnh - ví dụ như thấy http://slodge.blogspot.co.uk/2013/06/n28-custom-bindings-n1-days-of-mvvmcross.html

Đối với trường hợp cụ thể của một UIButton, bạn chỉ có thể ràng buộc "Tiêu đề" của nó - xem Fluent Bindings and UIButton titles

+1

AwesomeSauce! Tôi chắc chắn đánh giá cao sự giúp đỡ! Tôi cũng có nhu cầu cập nhật hình ảnh trên giao diện người dùng. Dường như Custom Binding là câu trả lời cho tất cả các câu hỏi của tôi. Tôi đánh giá cao phản hồi và sự kiên nhẫn của bạn. Tôi sẽ đi sâu vào hồ bơi ràng buộc tùy chỉnh. – blakeD

+3

Nhãn trên một nút có thể phức tạp - nếu bạn thấy rằng việc nhấp vào nút này sẽ khiến nhãn bị ràng buộc đặt lại trở lại thiết lập trong XIB, hãy thử cú pháp này thay thế: 'set.Bind (myButton) .For (" Tiêu đề ") .To (vm => vm.PropertyToBindTo);' Sự hiểu biết của tôi là nó gọi một ràng buộc được viết riêng cho kịch bản UIButton.Title. – Adam

6

Đối với tôi UIButton ràng buộc để TitleLabel không hoạt động. Tôi đã đưa ra tùy chỉnh ràng buộc mà hoạt động tuyệt vời và cách linh hoạt:

Áp dụng ràng buộc:

set.Bind(FinishedButton).For(UIButtonTextBinding.Property).To(v => v.FinishActionText); 

đang Binding:

public class UIButtonTextBinding : MvxTargetBinding 
{ 
    public const string Property = "ButtonText"; 

    protected UIButton View 
    { 
     get { return Target as UIButton; } 
    } 

    public UIButtonTextBinding(UIButton target) 
     : base(target) 
    { 
    } 

    public override void SetValue(object value) 
    { 
     var view = View; 
     if (view == null) 
      return; 

     var stringValue = value as string; 
     view.SetTitle(stringValue, UIControlState.Normal); 
    } 

    public override Type TargetType 
    { 
     get { return typeof(string); } 
    } 

    public override MvxBindingMode DefaultMode 
    { 
     get { return MvxBindingMode.OneWay; } 
    } 
} 
4

Các Cách đơn giản nhất để ràng buộc một Tiêu đề UIButton:

set.Bind(btnFoo).For("Title").To(vm => vm.BtnFooText); 
+0

Tôi nghĩ rằng đây là câu trả lời tốt nhất, vì điều này sử dụng các binder tùy chỉnh được cung cấp bởi MvvmCross ra khỏi hộp, và phục vụ chính xác mục đích của những gì OP đang cố gắng đạt được. –