2013-05-25 23 views
11

Vì giao diện người dùng của tôi thường cần phải có chuỗi được bản địa hóa, các mô hình khung nhìn của tôi cung cấp tất cả các chuỗi mà lượt xem sử dụng. Điều này bao gồm những thứ như tiêu đề trên các nút.Các liên kết lưu loát và tiêu đề UIButton

ở phía iOS, tiêu đề nút được đặt thông qua phương pháp SetTitle.
Để có được một chuỗi mô hình xem => tiêu đề nút để hoạt động, MvvmCross thực hiện một số bản dịch ràng buộc ma thuật để làm cho nó hoạt động tốt.

nói rằng tôi có UIButton có tên Foo trong chế độ xem của mình và tôi muốn ánh xạ tiêu đề của nó thành thuộc tính ButtonLabel trong Mô hình chế độ xem của tôi. Trong biết các công việc sau để thiết lập như một ràng buộc:

this.AddBindings(new Dictionary<object, string>() { 
     {Foo, "Title ButtonTitle"} 
}); 

Can này cùng ràng buộc được thiết lập bằng cách sử dụng hệ thống Binding thạo MvvmCross? Tôi đã đọc qua nguồn MvvmCross và tôi không hoàn toàn nhận được mã ràng buộc.

này sau không làm việc (vì trong thực tế các nút không có một tài sản Tiêu đề - nó có một phương pháp SetTitle):

var set = this.CreateBindingSet<FooView, FooViewModel>(); 
set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle); 
set.Apply(); 

Có một cách khác để đạt được kết quả mong muốn sử dụng thạo Bindings?

Trả lời

27

Bởi vì nút không có propery Tiêu đề, sau đó

set.Bind(Foo).For(b => b.Title).To(vm => vm.ButtonTitle); 

sẽ không biên dịch.

Tuy nhiên, mặc định MvvmCross configuraton cho Xamarin.ios có tùy chỉnh ràng buộc định nghĩa cho UIButton và "Title" - xem:

Vì lý do này, bạn sẽ có thể gọi:

set.Bind(Foo).For("Title").To(vm => vm.ButtonTitle); 

Và điều này nên thiết lập tương tự ràng buộc như:

this.AddBindings(new Dictionary<object, string>() { 
    {Foo, "Title ButtonTitle"} 
}); 

Đối với một giới thiệu rất ngắn gọn vào bindings tùy chỉnh xem: https://speakerdeck.com/cirrious/custom-bindings-in-mvvmcross

+0

Đối với chuỗi được bản địa hóa, bạn cũng có thể muốn xem xét chức năng liên kết ngôn ngữ được bản địa hóa - xem https: // speakerdeck.com/cirrious/internationalization-in-mvvmcross và http://slodge.blogspot.co.uk/2013/05/n21-internationalisation-i18n-n1-days.html – Stuart

+0

Thats tuyệt vời. Bạn đã trả lời câu hỏi của tôi và một số câu hỏi khác mà tôi thậm chí không hỏi. – Frank

+0

Stuart cũng đề cập: "nếu bạn nhìn vào [liên kết này] (https://github.com/slodge/MvvmCross-Tutorials/blob/master/CustomBinding/CustomBinding.Droid/Setup.cs) thì bạn sẽ thấy cách chúng tôi thêm thuộc tính ràng buộc 'SpecialProperty' và thuộc tính ràng buộc 'HitThis' vào hệ thống " – Frank

1

Trong phiên bản mới hơn của MvvmCross 5.x có được mạnh mẽ gõ mã dựa ràng buộc tính chất.

Chúng được thực hiện như sau:

set.Bind(Button).For(v => v.BindTitle()).To(vm => vm. ButtonTitle); 

chắc chắn rằng bạn thêm này sử dụng:

using MvvmCross.Binding.iOS; 

Một danh sách đầy đủ các thuộc tính mở rộng có thể được tìm thấy trong các tài liệu hướng dẫn herethis là PR những thay đổi đã diễn ra.