Я создаю UIActivityIndicatorView в моем Controller.ViewDidLoadUIActivityIndicatorView.StartAnimating перекрывая UIActivityIndicatorView.Hidden связывание
UIActivityIndicatorView spinner = new UIActivityIndicatorView();
spinner.StartAnimating();
spinner.Hidden = true;
this.Add(spinner);
Тогда я связывающим его с MVVMCross
var set = this.CreateBindingSet<TipView, TipViewModel>();
set.Bind(spinner).For(v => v.Hidden).To(vm => vm.IsBusy).WithConversion("Inverse");
Когда View изначально загружает UIActivityIndicatorView является спиннинг и видны. Это неверно, поскольку для свойства IsBusy явно установлено значение False в Init() ViewModel. Я вижу, что это происходит, и я вижу, что Конвертер инвертирует значение.
Я знаю, что привязка правильно подключена, потому что, если я запускаю команду, которая обновляет свойство IsBusy, индикатор отображается и скрывается, как я ожидал. Это неправильное исходное состояние.
Метод StartAnimating, по-видимому, вызывает переопределение скрытого флага. Если я не вызываю StartAnimating индикаторы, скрывает и показывает, как ожидалось. Конечно, это означает, что у меня есть неанимающий индикатор .
Я могу получить WeakReference для VM, послушать PropertyChanged и вызвать StartAnimating, но это кажется немного мусором.
Есть ли у кого-нибудь лучшие идеи?
Я пробовал номер 2, но не смог заставить элемент управления появляться на панели инструментов и, следовательно, не мог его перетащить на раскадровку. Затем я попробовал 4, но похоже, что мне нужно что-то вроде события ValueHasChanged, поэтому я могу ответить с помощью некоторого пользовательского кода в пользовательской привязке. У UIActivityIndicatorView таких событий нет. Кровавый iOS. –
вариант 3. Спасибо. –