gpt4 book ai didi

xamarin.ios - UIActivityIndi​​catorView.StartAnimating 重写 UIActivityIndi​​catorView.Hidden 绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 15:22:31 25 4
gpt4 key购买 nike

我正在 Controller.ViewDidLoad 中创建 UIActivityIndi​​catorView

UIActivityIndicatorView spinner = new UIActivityIndicatorView();
spinner.StartAnimating();
spinner.Hidden = true;
this.Add(spinner);

然后我将它与 MVVMCross 绑定(bind)

var set = this.CreateBindingSet<TipView, TipViewModel>();
set.Bind(spinner).For(v => v.Hidden).To(vm => vm.IsBusy).WithConversion("Inverse");

当 View 最初加载时,UIActivityIndi​​catorView 正在旋转并且可见。这是不正确的,因为 IsBusy 属性在 ViewModel 的 Init() 中被显式设置为 False。我可以看到这种情况发生,并且我可以看到转换器反转该值。

我知道绑定(bind)已正确连接,因为如果我触发更新 IsBusy 属性的命令,指示器将按我的预期显示和隐藏。这只是初始状态不正确。

StartAnimating 方法似乎会导致隐藏标志被覆盖。如果我不调用 StartAnimating,指示器将按预期隐藏和显示。当然,这意味着我有一个非动画指标。

我可以获取对 VM 的 WeakReference,监听 PropertyChanged 并调用 StartAnimating,但这似乎有点垃圾。

大家有更好的想法吗?

最佳答案

您可以执行的一些选项:

  1. 订阅 PropertyChanged 更改并在事件处理程序中编写自定义代码(按照您在问题中的建议)

  2. 继承 UIActivityIndi​​catorView 并编写一个公共(public) get;set; 属性,该属性提供复合功能(调用 Start >隐藏)在set处理程序

    public class MyIndicatorView : UIActivityIndicatorView {
    // ctors

    private bool _superHidden;
    public bool SuperHidden {
    get { return _supperHidden; }
    set { _superHidden = value; if (!value) StartAnimating() else StopAnimating(); Hidden = value; }
    }
    }
  3. 提供一个 View public get;set; 属性并将复合功能放入其中(例如 set.Bind(this).For( v => v.MyAdvanced)...

         private bool _myAdvanced;
    public bool MyAdvanced {
    get { return myAdvanced; }
    set { myAdvanced = value; if (!value) _spinner.StartAnimating() else _spinner.StopAnimating(); _spinner.Hidden = value; }
    }
  4. 为 Hidden 编写一个自定义绑定(bind),它将替换默认功能并包含组合的 StartHidden 调用(有关自定义绑定(bind)的更多信息,有几个N+1教程)

关于xamarin.ios - UIActivityIndi​​catorView.StartAnimating 重写 UIActivityIndi​​catorView.Hidden 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27906367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com