У меня есть представление в iOS, которое должно отображаться в двух режимах: один с кнопкой закрытия в заголовке навигации и один без кнопки закрытия. Я добавил логическое значение в свою модель представления, чтобы справиться с этим. Однако у UIBarButtonItem нет свойства Hidden для привязки к этому логическому значению в моей модели представления. Любые предложения о том, как решить эту проблему? ПРИМЕЧАНИЕ. Мне НЕ нужно изменять видимость этой кнопки закрытия во время выполнения. Это всего лишь начальная настройка только для чтения, которая мне нужна перед отображением представления.
MvvmCross: как привязать к видимости UIBarButtonItem?
Ответы (2)
Для статической настройки вы можете просто попробовать проверить свойство модели представления в коде ViewDidLoad.
Для создания пользовательских привязок см. https://speakerdeck.com/cirrious/custom-bindings-in-mvvmcross
person
Stuart
schedule
24.05.2013
У меня была та же проблема, но видимость должна была меняться динамически. Я смог имитировать видимость, отключив кнопку и установив цвет оттенка на прозрачный.
Создайте пользовательскую привязку TargetBinding:
/// <summary>
/// Hides a UIBarButtonItem by disabling and setting the TintColor to Clear
/// </summary>
public class UIBarButtonItemVisibilityTargetBinding : MvxConvertingTargetBinding
{
protected UIBarButtonItem Button => base.Target as UIBarButtonItem;
private readonly UIColor _tintColor;
public UIBarButtonItemVisibilityTargetBinding(UIBarButtonItem button) : base(button)
{
this._tintColor = button.TintColor;
if (button == null) {
MvxBindingTrace.Trace(MvxTraceLevel.Error, "Error - UIBarButtonItem is null in UIBarButtonItemVisibilityTargetBinding");
}
}
public override MvxBindingMode DefaultMode => MvxBindingMode.OneWay;
public override System.Type TargetType => typeof(bool);
protected override void SetValueImpl(object target, object value)
{
var button = (UIBarButtonItem) target;
var enabled = (bool) value;
button.Enabled = enabled;
button.TintColor = enabled ? _tintColor : UIColor.Clear;
}
}
Зарегистрируйте привязку TargetBinding в установочном файле:
protected override void FillTargetFactories (MvvmCross.Binding.Bindings.Target.Construction.IMvxTargetBindingFactoryRegistry registry)
{
base.FillTargetFactories (registry);
registry.RegisterCustomBindingFactory<UIBarButtonItem> ("Visibility", button => new UIBarButtonItemVisibilityTargetBinding (button));
}
Привязать к кнопке в контроллере представления с помощью пользовательской привязки:
set.Bind (btnBarItem).For("Visibility").To (vm => vm.ShowButton);
person
Oren
schedule
30.03.2016