2015-03-01 3 views
0

Для Xamarin iOS можно ли привязать свойство объекта, находящегося в пределах viewmodel. . если мы имеем следующий объект:Привязка к объекту property

public class MyObject: MvxNotifyPropertyChanged 
{ 
    private bool isHidden; 
    public bool IsHidden 
    { 
     get { return isHidden;} 
     set { isHidden;= value; RaisePropertyChanged(() => IsHidden} 
    } 
} 

И следующий ViewModel

public class MyViewModel 
    : MvxViewModel 
{ 
    public MyObject myObject; 
} 

со следующими обязательными на сайте MyView

this.CreateBinding(myLabel).For("Hidden") 
.To<MyViewModel>(vm => vm.MyObject.IsHidden).Apply(); 

Возможно ли это?

ответ

2

Да, мы можем использовать его много раз в наших приложениях.
MvvmCross ссылается на такие привязки как «привязанные привязки», если я правильно помню.

Но обязательно позаботьтесь о вызове события MyObject.PropertyChanged в соответствующем потоке (основной поток, чтобы обновить ваш интерфейс просмотра).
MvvmCross обрабатывать только вызывая событие PropertyChanged в главном потоке, пока вы находитесь на уровне ViewModel (обратите внимание на MvxNotifyPropertyChanged объект реализации)

Правильное связывание синтаксиса в моем случае это что-то вроде (который я ожидал, что эквивалентно к вашему ...):

var set = this.CreateBindingSet<MyView, MyViewModel>(); 
set.Bind(yourLabel) 
    .For(v => v.Hidden) 
    .To(vm => vm.MyObject.IsHidden); 
set.Apply(); 

Этот код должен быть применен в вашем MvxViewController.

+0

Привет @GGirard, даже если я установил MyObject.IsHidden в основной поток, используя InvokeOnMainThread (() => {}), он не вызывает изменение свойства в привязке. Является ли метод привязки действительным, как в приведенном выше коде, или мне нужно сделать что-то особенное, чтобы получить привязку с привязкой? – doorman

+1

Вы просмотрели вывод консоли, чтобы проверить, правильно ли применяется привязка? Вы можете добавить больше журналов привязки с 'Cirrious.MvvmCross.Binding.MvxBindingTrace.TraceBindingLevel = Cirrious.CrossCore.Platform.MvxTraceLevel.Diagnostic;' – GGirard

+0

Забыл RaisePropertyChanged на MyObject: спасибо! – doorman

Смежные вопросы