gpt4 book ai didi

mvvmcross - 是否可以在 Mvvmcross 中绑定(bind)隐藏/显示 UIAlertController?

转载 作者:行者123 更新时间:2023-12-04 16:03:52 25 4
gpt4 key购买 nike

我有一个与 API 交互的命令。如果该命令没有返回所需的结果,它会设置 ViewModel 的一个名为 Error 的属性。

我想将 Error 绑定(bind)到我的 View 中的 UIAlertController 并在发生错误时显示它。

这大致是我所拥有的(尽管显然可见性转换器不是可行的方法)。我应该补充一点,我知道应该使用 PresentViewController 来显示 UIAlertController。

        UIAlertController myAlert = UIAlertController.Create ("", Error.Text, UIAlertControllerStyle.Alert);
set.Bind(myAlert).For("Visibility").To((myViewModel vm) => vm.Error).WithConversion("Visibility");

最佳答案

查看观察者设计模式。我更喜欢实现这一目标的方式很简单:

  1. 创建继承自 MvxMessage 的类 - 比如说具有标题、内容等属性的 ShowAlertDialogMessage。
  2. 创建抽象 MessageObserver,其中 TMessage :MvxMessage 类,例如:

    public interface IMessageObserver
    {
    void Subscribe(IMvxMessenger messenger);
    void Unsubscribe();
    }

    public abstract class MessageObserver<TMessage> : IMessageObserver where TMessage : MvxMessage
    {
    public void Subscribe(IMvxMessenger messenger) {
    messenger.SubscribeOnMainThread<TMessage>(OnMessageDelivered);
    }

    public abstract void OnMessageDelivered(TMessage message);
    }
  3. 创建 MessageObserverController

public class MessageObserverController {
public void SubscribeObserver(IMessageObserver msgObserver) {
msgObserver.Subscribe(messenger);
}
.. unsubscribe, dispose and so on goes here
}

  1. 实现 ShowAlertDialogMessageObserver 类(继承自 MessageObserver<ShowAlertDialogMessage>(),它显示 UIAlertViewController 和来自 ShowAlertDialogMessage 的数据(标题、内容等)。如果需要,将根 UIViewController 作为构造函数传递(无论如何,您将在 View Controller 中注册 MessageObservers - 所以这是没问题)。

  2. 使用 MessageObserverController在您的 ViewController 中(最好创建基本 View Controller 以简化操作)。

瞧 - 您将获得可重用的 UI 逻辑,您可以通过在 PCL ViewModel 中发布消息来引发该逻辑(无需创建任何特定于平台的耦合!)。

关于mvvmcross - 是否可以在 Mvvmcross 中绑定(bind)隐藏/显示 UIAlertController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961400/

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