2013-07-29 1 views
1

Я хочу привязать присланную строку к UILabel, используя MVVMCross. Для того, чтобы связать обычную строку, я бы просто сделать:Как связать NSAttributeString (или NSMutableAttributedString)

set.Bind(MyLabel).To(vm => vm.MyString); 

Но мне нужна строка, где часть текста будет использовать один цвет и один размер шрифта, а другая часть будет использовать другой цвет и другой размер шрифта. Если это было статично, не проблема, я бы добавил метку в построитель интерфейсов и установил ее «приписал», а затем задал любые параметры шрифта, которые я хочу, на которых когда-либо были частью нужной строки.

Так я думал, что с Mvvmcross, я бы, вероятно, потребуется конвертер, чтобы превратить свой исходный строку в приписываемой строку, поэтому я попытался создать конвертер из MvxValueConverter<string,NSMutableAttributedString>, что просто делает это в своем Convert методе:

return new NSMutableAttributedString(value); 

В конце концов я фактически добавлю несколько разных атрибутов. К сожалению, это не работает. Если я устанавливаю мое связывание так:

set.Bind(MyLabel).To(vm => vm.MyString).WithConversion("MyConverter"); 

Оказывается, что MvvmCross просто делает .ToString на приписываемую строке и отображает как:

Some Text {} 

Обратите внимание на {} не является частью исходной строки ,

Есть ли способ связать привязанную строку в MVVMCross?

ответ

1

Если вы звоните

set.Bind(MyLabel).To(vm => vm.MyString); 

то являются обязательным свойство по умолчанию вашего UILabel который является string свойства Text.

Вместо этого вам необходимо привязать AttributedText. Попробуйте добавить что-то вроде:

.For(l => l.AttributedText) 

Есть несколько вопросов, на здесь об использовании AttributedText - например Underline text in UILabel in monotouch (porting ObjC code)

Более подробную информацию о MVX связывания данных см https://github.com/slodge/MvvmCross/wiki/Databinding

+0

Спасибо Стюарт. Так оно и было. И спасибо за ссылку, API для работы с атрибутированными строками немного сбивает с толку. –